首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python在写入CSV文件时不会自动转到下一行

Python在写入CSV文件时不会自动转到下一行
EN

Stack Overflow用户
提问于 2016-11-01 19:19:57
回答 2查看 241关注 0票数 2

我试图打开一个源文件CSV文件(source.csv),并根据第一个列名将它分解为几个CSV文件。我用这个例子来展示它:

source.csv含量

代码语言:javascript
复制
2016-11,a
2016-11,b
2016-12,a
2016-12,b
2016-12,c

我希望该程序创建两个具有2016-11.csv2016-12.csv名称的文件:

2016-11.csv的期望含量

代码语言:javascript
复制
2016-11,a
2016-11,b

2016-12.csv的期望含量

代码语言:javascript
复制
2016-12,a
2016-12,b
2016-12,c

我开发了这个代码:

代码语言:javascript
复制
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)

问题是,它只是写入每个文件的第一行,而不会在编写时自动转到下一行。我怎样才能解决这个问题?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-11-01 19:25:36

每次使用w标志打开文件时,都要覆盖文件的内容,而是尝试将行分组为itertools.groupby

代码语言:javascript
复制
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)
票数 2
EN

Stack Overflow用户

发布于 2016-11-01 19:23:55

您正在用'w'覆盖前面的文件。除了打开文件并在每次迭代中结束之外,不是一个非常好的主意。

为什么不使用每一行中的第一项(即日期)作为分组标准来读取所有行并使用itertools.groupby对它们进行分组。然后在拆分后写入每个文件。文件names将是每个组的关键。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40367161

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档