我有几个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
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
我很惊讶没有人推荐熊猫。尽管使用一组依赖项(如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
这应该会让你知道该怎么做:
>>> 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