【问题标题】:Add a new column to .csv and populate with filename向 .csv 添加新列并填充文件名
【发布时间】:2017-06-28 07:27:25
【问题描述】:

我对 python 比较陌生,正在尝试向目录中的所有 .csv 文件添加一个新列,并使用父 csv 的文件名填充它们。

迄今为止,我的代码(来自论坛的其他部分)允许我向单个文件 (listings1.csv) 添加一个新列并将其命名为“文件名”,然后使用文件中的其他变量填充它(第 0 行, 1,2 等)。

我想对此做两处修改:

  1. 将文件的实际名称 (listings1) 添加到 FileName 而不是来自另一列的数据
  2. 对目录中的所有 csv 文件(listings1、listings2、listings3...)运行此命令,只更新源文件而不是创建新文件(output1 等)

任何建议表示赞赏

import csv

with open('listings1.csv','r') as csvinput:
with open('output1.csv', 'w') as csvoutput:
    writer = csv.writer(csvoutput, lineterminator='\n')
    reader = csv.reader(csvinput)

    all = []
    row = next(reader)
    row.append('FileName')
    all.append(row)

    for row in reader:
        row.append(row[1])
        all.append(row)

    writer.writerows(all)

【问题讨论】:

    标签: python csv


    【解决方案1】:

    我不确定我是否完全理解了你的问题,但在最坏的情况下,这应该会让你知道如何解决你的问题。

    import csv
    import os
    
    for file_name in os.listdir():
        with open(file_name,'r') as csvinput:
            reader = csv.reader(csvinput)
    
            all = []
            row = next(reader)
            row.append('FileName')
            all.append(row)
    
            for row in reader:
                row.append(file_name)
                all.append(row)
    
            with open(file_name, 'w') as csvoutput:
                writer = csv.writer(csvoutput, lineterminator='\n')
                writer.writerows(all)
    

    【讨论】:

    • 迈克尔,感谢您的帮助。我尝试使用它,但收到一条错误消息,说 listdir 接受一个参数并给出 0。我需要在这里添加绝对路径吗?如 os.listdir('G:/Projects/Files') ?
    • 不知道您正在运行 python2。我的解决方案适用于 python3。正如您所提到的,在 python2 中您需要指定路径。
    • 谢谢。这对我有用。我需要做什么才能为 .xls 文件而不是 .csv 文件执行此任务?
    猜你喜欢
    • 2021-04-01
    • 2017-06-22
    • 2018-01-01
    • 1970-01-01
    • 2018-10-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-10
    • 2012-07-09
    相关资源
    最近更新 更多