每次写入新行时,Python unicodecsv.writer都会重写所有以前的行

时间:2017-02-22 19:58:27

标签: python python-2.7 csv

我正在解析来自多个excel文件的数据,转换它们,并将它们写入单个csv文件。我能够让它发挥作用。但是,我决定将部分分解为函数并通过顺序调用每个函数来运行脚本。

进行此更改后,脚本的编写器部分以某种方式循环,现在写入以下内容: header_row,data_row1,header_row,data_row1,data_row2,header_row ...

以下是出现问题的打印功能。我已经确认DictList2中的数据是正确形成的,并且[header]是准确的。

def PrintProcess2(directory2):
    with open(directory2 + "participant list.csv", 'wb') as f:
        headers = sorted([k for k, v in DictList2[0].items()])
        csv_data = [headers]
        for d in DictList2:
            csv_data.append([d[h] for h in headers])

            writer = csv.writer(f)
            writer.writerows(csv_data)

此函数中的代码与没有函数的版本相同,并且正确地写入数据。在这一点上,我完全被难倒了。有人可以帮忙吗?

1 个答案:

答案 0 :(得分:0)

  1. 每次循环时都不要创建新的csv.writer实例。

  2. 您的主要问题是您要将行追加到csv_data然后使用writerows ...尝试类似以下内容:

    def PrintProcess2(directory2): with open(directory2 + "participant list.csv", 'wb') as f: writer = csv.writer(f) headers = sorted([k for k, v in DictList2[0].items()]) writer.writerow(headers) for d in DictList2: writer.writerow([d[h] for h in headers])