Python没有';写入CSV文件时,不会自动转到下一行
我正在尝试打开一个源CSV文件(Python没有';写入CSV文件时,不会自动转到下一行,python,csv,Python,Csv,我正在尝试打开一个源CSV文件(source.CSV),并根据第一列名称将其分解为几个CSV文件。我用这个例子来说明: source.csv的内容: 2016-11,a 2016-11,b 2016-12,a 2016-12,b 2016-12,c 2016-11,a 2016-11,b 2016-12,a 2016-12,b 2016-12,c 我预计该程序将创建两个名为2016-11.csv和2016-12.csv的文件: 2016-11.csv的预期内容: 2016-11,a 201
source.CSV
),并根据第一列名称将其分解为几个CSV文件。我用这个例子来说明:
source.csv的内容
:
2016-11,a
2016-11,b
2016-12,a
2016-12,b
2016-12,c
2016-11,a
2016-11,b
2016-12,a
2016-12,b
2016-12,c
我预计该程序将创建两个名为2016-11.csv
和2016-12.csv
的文件:
2016-11.csv的预期内容:
2016-11,a
2016-11,b
2016-12,a
2016-12,b
2016-12,c
2016-11,a
2016-11,b
2016-12,a
2016-12,b
2016-12,c
2016-12.csv的预期内容
:
2016-11,a
2016-11,b
2016-12,a
2016-12,b
2016-12,c
2016-11,a
2016-11,b
2016-12,a
2016-12,b
2016-12,c
我开发了以下代码:
import csv
path1='/home/sourcefilepath/'
path2='/home/targetpath/'
filename='source.csv'
with open(path1+filename) as f:
reader = csv.reader(f)
for row in reader:
date=row[0]
with open(path2+date+'.csv', 'w') as csvfile:
writer = csv.writer(csvfile, delimiter=',')
writer.writerow(row)
问题是它只写每个文件的第一行,而在写的时候不会自动转到下一行。如何解决此问题?您正在使用
'w'
覆盖以前的文件。除此之外,在每次迭代时打开文件并关闭也不是一个好主意
为什么不读取所有行并使用
itertools.groupby
将它们分组,使用每行中的第一项(即日期)作为分组标准。然后在拆分后写入每个文件。文件名将是每个组的键。每次使用w
标志打开文件时,都会覆盖文件内容,请尝试使用itertools对行进行分组。groupby
:
import csv
import itertools
with open(path1 + filename) as f:
reader = csv.reader(f)
for date, rows in itertools.groupby(reader, lambda row: row[0]):
with open(path2 + date + '.csv', 'w') as csvfile:
writer = csv.writer(csvfile, delimiter=',')
writer.writerows(rows)
你是不是想用a而不是w?此外,每次写入后打开和关闭文件有点效率低下,您可以同时打开两个文件。您是对的,只需将“w”更改为“a”即可解决问题!tnx‘w’还是‘a’?也许“a”是当前的趋势one@Woeitg使用
itertools.groupby
的额外好处是,您不必多次打开和关闭文件,这很慢,writerows
也比多次调用writerow
快。我猜如果源文件按第一列排序,那么这两个答案在性能上并没有太大差异。