将 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,然后直接从您的压缩列表中压缩第一个子元素。
我压缩了一堆列表:
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,然后直接从您的压缩列表中压缩第一个子元素。