【问题标题】:Adding headers to a csv file将标题添加到 csv 文件
【发布时间】:2015-12-02 06:36:16
【问题描述】:

我有一堆已压缩的列表:

 zipped = zip(list1, list2, list3)

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

Col_1    Col_2    Col_3
data     data     data

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

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)

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

【问题讨论】:

  • edit您的问题并发布您得到的确切输出。
  • 您可以将 DictWriter 与 writeheader() 方法一起使用。

标签: python list python-2.7 csv export-to-csv


【解决方案1】:

您需要保留现有标题,即阅读器对象的第一行:

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)

您自己的代码实际上不会覆盖标题,它会添加您的新标题,然后将原始标题与压缩列表中的第一个子元素一起压缩。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-04-05
    • 1970-01-01
    • 2012-03-07
    • 2018-06-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多