当前位置: 首页 > 知识库问答 >
问题:

如何向CSV文件中添加新列?

訾高明
2023-03-14

我有几个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'])

(Python 3.2)

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

Output
Name        Code    Berry
blackberry  1   Berry

wineberry   2   Berry

rasberry    1   Berry

blueberry   1   Berry

mulberry    2   Berry

共有3个答案

徐新荣
2023-03-14
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):
            if row[0] == "Name":
                writer.writerow(row+["Berry"])
            else:
                writer.writerow(row+[row[0]])

也许这样的事情是你想要的?

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

Name,Code
blackberry,1
wineberry,2
rasberry,1
blueberry,1
mulberry,2
弘靖琪
2023-03-14

我很惊讶没有人推荐熊猫。尽管使用一组依赖项(如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)

更多信息,请访问熊猫网站!

output.csv的内容:

Name,Code,Berries
blackberry,1,blackberry
wineberry,2,wineberry
rasberry,1,rasberry
blueberry,1,blueberry
mulberry,2,mulberry
宣原
2023-03-14

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

>>> 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你必须使用下一个(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)

请注意

>

  • csv中的lineterminator参数。编写器。默认情况下,它设置为'\r\n',这就是为什么要使用双间距
  • 使用列表附加所有行并使用writerows一次性写入它们。如果您的文件非常大,这可能不是一个好主意(RAM),但对于普通文件,我认为速度更快,因为I/O更少。
  • 如本文评论所示,请注意,您可以在同一行中使用语句,而不是将这两个嵌套在语句中:

    用open('C:/test/test.csv','r')作为csvinput,open('C:/test/output.csv','w')作为csv输出:

  •  类似资料:
    • 问题内容: 我有几个CSV文件,如下所示: 我想在所有CSV文件中添加一个新列,使其看起来像这样: 到目前为止,我的脚本是: (Python 3.2) 但是在输出中,脚本跳过了每一行,新列中仅包含Berry: 问题答案: 这应该使您知道该怎么做: 编辑,注意在py3k中必须使用 感谢您接受答案。在这里,您有一个好处(您的工作脚本): 请注意 中的参数。默认情况下,它设置为,这就是为什么间距为两倍的

    • 我有一个文件,其中包含以下数据: 我正在尝试插入一个名为“Date”的列作为第一列。 我使用的进出口商品如下: 但上述情况并没有如预期的那样起作用。它正在替换列数据。

    • 然后我跑: 然后我得到: IllegalArgumentException:需求失败:列数不匹配。旧列名(1):值新列名(5):startIP,endIP,City,Longitude,Latitude at scala.predef$.require(predef.scala:224)at org.apache.spark.sql.dataset.todf(dataset.scala:376)a

    • 问题内容: 我有一个CSV文件,例如 我想加上引号使它像: 最快的方法是什么?我将在cronjob中实现它。 问题答案: 使用sed:

    • 我尝试从Eclipse切换到IntellijIDEA。我有一个使用Git的项目,我想快速向.gitignore文件添加文件。在Eclipse中,我可以右键单击一个文件/目录,然后选择'Add to.gitignore'。 在IntelliJ IDEA中是否有类似的内容或者我必须手动编辑文件?

    • 我需要开发android文件浏览器应用程序。我将文件名和文件路径都放入两个单独的ArrayList中,然后分配给ArrayAdapter。我使用TextView显示文件名和文件夹名。文件资源管理器工作正常。现在我需要添加文件夹图标到文件夹和文件图标到文件。 无法在布局文件中执行此操作,因为所有文件夹和文件都位于同一个ArrayAdapter中。我试图在代码中实现这一点,但我必须将整个ArrayLi