根据文件名添加 CSV 列

Add a CSV column based on file name

我有以下 CSV 个文件作为目录中的输入文件:

USA_Chicago_data.csv
USA_Dallas_data.csv

其中有这样的数据:

Area          Population   No_of_houses
Brookfield    100000        20000
Springdale    50000         10000

我想根据文件名在文件开头添加一列城市名称。

USA_Chicago_data.csv 的示例输出:

City     Area          Population   No_of_houses
Chicago  Brookfield    100000        20000
Chicago  Springdale    50000         10000

它应该有条件读取文件名并从中提取城市并将其添加到第一列。

我正在尝试以下脚本:

with open(file, 'r') as csvinput:
  if ("Chicago" in file):
    with open('file'+_output.csv', 'w') as csvoutput:
        writer = csv.writer(csvoutput, lineterminator='\n')
        for row in csv.reader(csvinput):
            writer.writerow(row + ['City'])

但是运行出错了。有什么解决办法?我想在不使用 pandas.

的情况下实现这一目标

像这样的东西应该可以解决问题。由于引号混淆,您的第二个“打开”语句中存在语法错误。

# Extract the city:
city = file.split('_')[1]

with open(file,'r') as csvinput, open(f'USA_{city}_data_output.csv','w') as cvsoutput:
    writer = csv.writer(csvoutput, lineterminator='\n')
    for row in csv.reader(csvinput):
        if row[0] == 'Area':
            row.insert( 0, 'City')
        else:
            row.insert( 0, city )
        writer.writerow(row)

跟进

要覆盖原始文件,您需要:

# Extract the city:
city = file.split('_')[1]
newfile = f'USA_{city}_data_output.csv'

with open(file,'r') as csvinput, open(newfile,'w') as cvsoutput:
    writer = csv.writer(csvoutput, lineterminator='\n')
    for row in csv.reader(csvinput):
        if row[0] == 'Area':
            row.insert( 0, 'City')
        else:
            row.insert( 0, city )
        writer.writerow(row)

os.remove( file )
os.rename( newfile, file )