Python没有';写入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

我正在尝试打开一个源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
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
快。我猜如果源文件按第一列排序,那么这两个答案在性能上并没有太大差异。