如何将新列添加到 CSV 文件? [英] How to add a new column to a CSV file?

查看:58
本文介绍了如何将新列添加到 CSV 文件?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

输入名称代码黑莓 1酒莓 2覆盆子 1蓝莓 1桑葚2

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

输出名称代码浆果黑莓 1 黑莓酒莓 2 酒莓覆盆子 1 覆盆子蓝莓 1 蓝莓桑树 2 桑树

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

导入csv使用 open(input.csv,'r') 作为 csvinput:使用 open(output.csv, 'w') 作为 csvoutput:writer = csv.writer(csvoutput)对于 csv.reader(csvinput) 中的行:writer.writerow(row+['Berry'])

(Python 3.2)

但是在输出中,脚本会跳过每一行并且新列中只有 Berry:

输出名称代码浆果黑莓 1 个浆果wineberry 2 浆果覆盆子 1 个浆果蓝莓 1 个桑椹 2 浆果

解决方案

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

<预><代码>>>>v = open('C:/test/test.csv')>>>r = csv.reader(v)>>>row0 = r.next()>>>row0.append('浆果')>>>打印第 0 行['名称','代码','浆果']>>>对于 r 中的项目:... item.append(item[0])...打印项目...['黑莓','1','黑莓']['wineberry', '2', 'wineberry']['覆盆子','1','覆盆子']['蓝莓','1','蓝莓']['桑树', '2', '桑树']>>>

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

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

导入csv使用 open('C:/test/test.csv','r') 作为 csvinput:使用 open('C:/test/output.csv', 'w') 作为 csvoutput:writer = csv.writer(csvoutput, lineterminator='
')阅读器 = csv.reader(csvinput)全部 = []行 = 下一个(读者)row.append('Berry')all.append(row)对于阅读器中的行:row.append(row[0])all.append(row)writer.writerows(全部)

请注意

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

    以 open('C:/test/test.csv','r') 作为 csvinput, open('C:/test/output.csv', 'w') 作为 csvoutput:

    莉>

I have several CSV files that look like this:

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

I would like to add a new column to all CSV files so that it would look like this:

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

The script I have so far is this:

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'])

(Python 3.2)

But in the output, the script skips every line and the new column has only Berry in it:

Output
Name        Code    Berry
blackberry  1   Berry

wineberry   2   Berry

rasberry    1   Berry

blueberry   1   Berry

mulberry    2   Berry

解决方案

This should give you an idea of what to do:

>>> 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']
>>> 

Edit, note in py3k you must use next(r)

Thanks for accepting the answer. Here you have a bonus (your working script):

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='
')
        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)

Please note

  1. the lineterminator parameter in csv.writer. By default it is set to ' ' and this is why you have double spacing.
  2. the use of a list to append all the lines and to write them in one shot with writerows. If your file is very, very big this probably is not a good idea (RAM) but for normal files I think it is faster because there is less I/O.
  3. As indicated in the comments to this post, note that instead of nesting the two with statements, you can do it in the same line:

    with open('C:/test/test.csv','r') as csvinput, open('C:/test/output.csv', 'w') as csvoutput:

这篇关于如何将新列添加到 CSV 文件?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆