为了账号安全,请及时绑定邮箱和手机立即绑定

如何将新列添加到CSV文件?

如何将新列添加到CSV文件?

侃侃无极 2019-08-08 14:59:56
如何将新列添加到CSV文件?我有几个CSV文件,如下所示:InputName        Codeblackberry  1wineberry   2rasberry    1blueberry   1mulberry    2我想为所有CSV文件添加一个新列,以便它看起来像这样:OutputName        Code    Berryblackberry  1   blackberrywineberry   2   wineberryrasberry    1   rasberryblueberry   1   blueberrymulberry    2   mulberry我到目前为止的脚本是这样的:import csvwith 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)但是在输出中,脚本会跳过每一行,而新列中只有Berry:OutputName        Code    Berryblackberry  1   Berrywineberry   2   Berryrasberry    1   Berryblueberry   1   Berrymulberry    2   Berry
查看完整描述

3 回答

?
慕田峪9158850

TA贡献1794条经验 获得超7个赞

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


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

请注意


中的lineterminator参数csv.writer。默认设置为'\r\n',这就是你有双倍间距的原因。

使用列表附加所有行并用一次性写入它们writerows。如果您的文件非常非常大,这可能不是一个好主意(RAM),但对于普通文件,我认为它更快,因为I / O较少。

如本文的评论中所示,请注意with,您可以在同一行中执行此操作,而不是嵌套这两个语句:


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


查看完整回答
反对 回复 2019-08-08
?
跃然一笑

TA贡献1826条经验 获得超6个赞

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

也许这样的东西是你想要的?

此外,csv代表逗号分隔值。所以,你需要用逗号分隔你的价值观,我认为:

Name,Codeblackberry,1wineberry,2rasberry,1blueberry,1mulberry,2


查看完整回答
反对 回复 2019-08-08
  • 3 回答
  • 0 关注
  • 1772 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信