如何向 CSV 文件添加新列?

新手上路,请多包涵

我有几个如下所示的 CSV 文件:

 Input
Name        Code
blackberry  1
wineberry   2
rasberry    1
blueberry   1
mulberry    2

我想向所有 CSV 文件添加一个新列,这样它看起来像这样:

 Output
Name        Code    Berry
blackberry  1   blackberry
wineberry   2   wineberry
rasberry    1   rasberry
blueberry   1   blueberry
mulberry    2   mulberry

到目前为止我的脚本是这样的:

 import csv
with open(input.csv,'r') as csvinput:
    with open(output.csv, 'w') as csvoutput:
        writer = csv.writer(csvoutput)
        for row in csv.reader(csvinput):
            writer.writerow(row+['Berry'])

(蟒蛇 3.2)

但在输出中,脚本跳过了每一行,新列中只有 Berry:

 Output
Name        Code    Berry
blackberry  1   Berry

wineberry   2   Berry

rasberry    1   Berry

blueberry   1   Berry

mulberry    2   Berry

原文由 fairyberry 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 861
2 个回答

这应该让您知道该怎么做:

 >>> v = open('C:/test/test.csv')
>>> r = csv.reader(v)
>>> row0 = r.next()
>>> row0.append('berry')
>>> print row0
['Name', 'Code', 'berry']
>>> for item in r:
...     item.append(item[0])
...     print item
...
['blackberry', '1', 'blackberry']
['wineberry', '2', 'wineberry']
['rasberry', '1', 'rasberry']
['blueberry', '1', 'blueberry']
['mulberry', '2', 'mulberry']
>>>

编辑,注意在 py3k 中你必须使用 next(r)

感谢您接受答案。在这里你有一个奖励(你的工作脚本):

 import csv

with open('C:/test/test.csv','r') as csvinput:
    with open('C:/test/output.csv', 'w') as csvoutput:
        writer = csv.writer(csvoutput, lineterminator='\n')
        reader = csv.reader(csvinput)

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

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

        writer.writerows(all)

请注意

  1. lineterminator 中的参数 csv.writer 。默认情况下它设置为 '\r\n' 这就是为什么你有双倍间距。
  2. 使用列表附加所有行并使用 writerows 一次性写入它们。如果您的文件非常非常大,这可能不是一个好主意(RAM),但对于普通文件,我认为它更快,因为 I/O 更少。
  3. 正如这篇文章的评论中所指出的,请注意,不是嵌套两个 with 语句,而是可以在同一行中进行:

使用 open(‘C:/test/test.csv’,‘r’) 作为 csvinput,open(‘C:/test/output.csv’, ‘w’) 作为 csvoutput:

原文由 joaquin 发布,翻译遵循 CC BY-SA 3.0 许可协议

我很惊讶没有人建议 Pandas。尽管使用像 Pandas 这样的一组依赖项可能看起来比完成如此简单的任务所必需的更笨重,但它会生成一个非常短的脚本,而且 Pandas 是一个很棒的库,可以进行各种 CSV(实际上是所有数据类型)数据操作.不能与 4 行代码争论:

 import pandas as pd
csv_input = pd.read_csv('input.csv')
csv_input['Berries'] = csv_input['Name']
csv_input.to_csv('output.csv', index=False)

查看 Pandas 网站 了解更多信息!

output.csv 的内容:

 Name,Code,Berries
blackberry,1,blackberry
wineberry,2,wineberry
rasberry,1,rasberry
blueberry,1,blueberry
mulberry,2,mulberry

原文由 Blairg23 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题