我是一个python初学者,(我实际上使用的是2.7版本)
我的代码实际上运行良好(这是一个简单的代码) 但它在我的输出文件中的reslut之间插入新行。我注意到他们在文档中提到了它(进一步参见),但没有办法避免在字段为空时自动插入换行符。
任何可以帮助我的人?
new= csv.DictReader(ifile,fieldnames=None)
output = csv.DictWriter(ofile,fieldnames=None,dialect='excel',delimiter="\t")
for item in new:
output.writer.writerow(item.values())
print item
在版本2.5中更改:解析器现在对于多行引用字段更严格。以前,如果某行在引号字段内结束而没有终止换行符,将在返回的字段中插入换行符。在读取包含字段内的回车符的文件时,此行为会导致问题。行为已更改为返回字段而不插入换行符。因此,如果字段中嵌入的换行很重要,输入应以保留换行符的方式拆分为行。
结果:
{'Url;Site Source;Communaute': 'lafranceagricole.fr;Site Media;'} {'Url;Site Source;Communaute': 'economiesolidaire.com;Blog;'} {'Url;Site Source;Communaute': 'arpentnourricier.org;Blog;'} {'Url;Site Source;Communaute': 'arpentnourricier.org;Blog;'} {'Url;Site Source;Communaute': 'mamienne.canalblog.com;Blog;'}
所以我有一个错误,我的标题正在成为关键,而不是简单的标题 我想要的(Url;网站来源;Communauté) {lafranceagricole.fr;网站媒体}
我的csv中没有空白行,因此空白字段可能无法生成新行。 也许通过defaut empty的字段社区创建新行
答案 0 :(得分:1)
如果您希望;
成为字段分隔符,则必须指定:
new = csv.reader(ifile, delimiter=';')
output = csv.writer(ofile,dialect='excel',delimiter="\t")
for item in new:
output.writerow(item)
这与DictReader
分隔字段的效果一样。
写入分隔的字段制表符;我根本看不到任何空行。
澄清问题之前的旧回答
我不清楚为什么你使用DictReader
来读取你的输入,如果你只想要单元格值,而不是字段名称。但是,如果由于某种原因,您确实需要使用DictReader
:
from itertools import chain
output.writer.writerow(list(chain.from_iterable(item.values() for item in new)))
将所有值(制表符分隔)写入输出文件,中间没有换行符。
如果您真的不需要DictReader
,
new = csv.reader(ifile)
output = csv.writer(ofile,dialect='excel',delimiter="\t")
next(new) # to skip the field names
output.writerow(list(chain.from_iterable(new)))
将再次将单元格作为一行(制表符分隔)写入输出文件。