将 headers 添加到 csv 文件

Adding headers to a csv file

我压缩了一堆列表:

 zipped = zip(list1, list2, list3)

我有一个 csv 文件(已经有 headers),看起来像这样:

Col_1    Col_2    Col_3
data     data     data

现在我想将我的压缩列表添加为现有文件的列,这样它看起来像这样(列表名称为 headers):

Col_1    Col_2    Col_3    list1    list2    list3
data     data     data     data     data     data

我现在有这个代码:

with open('existing.csv', 'rb') as infile, open('out_file.csv', 'wb') as outfile:
    reader = csv.reader(infile)
    writer = csv.writer(outfile)
    writer.writerow(["list1", "list2", "list3"])
    for i, row in enumerate(reader):
        row.extend(zipped[i])
        writer.writerow(row)

但是,不幸的是,这会覆盖现有的列名。

您需要保留现有的 header,这是 reader object:

的第一行
with open('existing.csv', 'rb') as infile, open('out_file.csv', 'wb') as outfile:
    reader = csv.reader(infile)
    header = next(reader) # get header
    writer = csv.writer(outfile)
    # create list with old header and new
    writer.writerow(header+["list1", "list2", "list3"])

您还可以使用 itertools.izip 压缩列表,在 for 循环中调用 next 以获取每个子元素:

from itertools import izip
zipped = izip(list1, list2, list3)
with open('existing.csv', 'rb') as infile, open('out_file.csv', 'wb') as outfile:
    reader = csv.reader(infile)
    headers = next(reader)
    writer = csv.writer(outfile)
    writer.writerow(headers+["list1", "list2", "list3"])
    for  row in  reader:
        row.extend(next(zipped))
        writer.writerow(row)

您自己的代码实际上不会覆盖 header,它会添加您的新 header,然后添加原始 header,然后直接从您的压缩列表中压缩第一个子元素。