从一个文件中提取一行值,并将该值放入另一个文件中的另一行(文件名对应于前一个文件的行)

Extracting a row value from one file, and putting that value to another row in another file (with filename corresponds to row of the previous file)

我有一个 CSV 文件名列表(在另一个名为 CSV_file_1 的 CSV 文件中)。但是,我想在 CSV_file_1 中添加额外的两列,其中行值将来自数千个单独的 CSV 文件。

CSV_file_1内容如下:

1.csv
2.csv
3.csv

在另一个文件夹中的数千个文件中,它包含我想放入 CSV_file_1 中的值。例如,1.csv 包含以下行:

LATITUDE : ;13.63345
LONGITUDE : ;123.207083  

2.csv 包含以下行:

LATITUDE : ;13.11111
LONGITUDE : ;123.22222 

3.csv 包含以下行:

LATITUDE : ;13.22222
LONGITUDE : ;123.11111 

等等。

我想要CSV_file_1的结果如下:

FILENAME:      LATITUDE:     LONGITUDE:
    1.csv      13.63345      123.207083
    2.csv      13.11111      123.22222
    3.csv      13.22222      123.11111

我已经设法得到我的CSV_file_1,但还没有纬度和经度(这将来自如上所示分隔的单个文件)。

我的代码是这样的:

import pandas as pd

import glob

print(glob.glob("D:/2021/*.csv")) 

#list of all the filenames collated and put in CSV_file_1
CSV_file_1 = pd.DataFrame(glob.glob("D:/2021/*.csv")) 


 #creating blank columns in CSV_file_1
CSV_file_1 ['Latitude'] = ""
CSV_file_1 ['Longitude'] = ""

#here im trying to access each file in the given folder(file name must correspond to the row in CSV_file_1), extract the data (latitude and longitude) and copy it to CSV_file_1
 import csv
 with open('D:/2021/*.csv','rt')as file:
      data = csv.reader(file)
      for row in file:
            if glob.glob("D:/2021/*.csv") = CSV_file_1['FILENAME']:
                CSV_file_1.iloc[i] ['LATITUDE:'] ==file.iloc[i]
        
        
        
    CSV_file_1.to_csv('D:/2021/CSV_file_1.csv', index = False)

但语法无效。

 if glob.glob("D:/2021/*.csv") = CSV_file_1['FILENAME']:
            ^
SyntaxError: invalid syntax

我是 python 新手,所以我想寻求帮助来修复我的代码。

如果我正确理解你的问题,我认为你的方法有点复杂。我实现了一个创建所需输出的脚本。

首先,将包含其他文件名称的 CSV 文件直接读入数据框的第一列。然后,文件名用于从每个文件中提取经度和纬度。为此,我创建了一个函数,您可以在脚本的第一部分看到它。最后,我将提取的值添加到数据框中,并将其存储在所需格式的文件中。

import pandas as pd
import csv

# Function that takes 
def get_lati_and_long_from_csv(csv_path):
    with open(csv_path,'rt') as file:
        # Read csv file content to list of rows
        data = list(csv.reader(file, delimiter =';'))
        
        # Take values from row zero and one
        latitude = data[0][1]
        longitude = data[1][1]
      
        
        return (latitude, longitude)

def main():      
    # Define path of first csv file
    csv_file_1_path = "CSV_file_1.csv"

    # Read data frame from csv file and create correct column name
    CSV_file_1 = pd.read_csv(csv_file_1_path, header=None)
    CSV_file_1.columns = ['FILENAME:']
    
    # Create list of files to read the coordinates
    list_of_csvs = list(CSV_file_1['FILENAME:'])

    # Define empty lists to add the coordinates
    lat_list = []
    lon_list = []
    
    # Iterate over all csv files and extract longitude and latitude
    for csv_path in list_of_csvs:
        lat, lon = get_lati_and_long_from_csv(csv_path)
        lat_list.append(lat)
        lon_list.append(lon)
        
    # Add coordinates to the data frame
    CSV_file_1['Latitude:'] = lat_list
    CSV_file_1['Longitude:'] = lon_list
 
    # Save final data frame to csv file
    CSV_file_1.to_csv(csv_file_1_path+'.out', index = False, sep='\t')
    
if __name__ == "__main__":
    main()

测试输入文件内容:

1.csv
2.csv
3.csv

测试输出文件内容:

FILENAME:   Latitude:   Longitude:
1.csv   13.63345    123.207083  
2.csv   13.11111    123.22222 
3.csv   13.22222    123.11111

编辑: 如果您的文件不包含任何其他数据,我会建议简化事情并删除 pandas 因为它不需要。以下 main() 函数产生相同的结果,但仅使用 CSV 模块。

def main():      
    # Define path of first csv file
    csv_file_1_path = "CSV_file_1.csv"

    # Read file to list containing the paths of the other csv files
    with open(csv_file_1_path,'rt') as file:
        list_of_csvs = file.read().splitlines()
        
    print(list_of_csvs)
    # Define empty lists to add the coordinates
    lat_list = []
    lon_list = []
    
    # Iterate over all csv files and extract longitude and latitude
    for csv_path in list_of_csvs:
        lat, lon = get_lati_and_long_from_csv(csv_path)
        lat_list.append(lat)
        lon_list.append(lon)
    
    # Combine the three different lists to create the rows of the new csv file
    data = list(zip(list_of_csvs, lat_list, lon_list))
    
    # Create the headers and combine them with the other rows
    rows = [['FILENAME:', 'Latitude:', 'Longitude:']]
    rows.extend(data)
    
    # Write everything to the final csv file
    with open(csv_file_1_path + '.out','w') as file:
        csv_writer = csv.writer(file, dialect='excel', delimiter='\t')
        csv_writer.writerows(rows)