当Dict字段为空时,CSV中没有换行符[Python,CSV]

时间:2011-08-22 09:07:26

标签: python csv dictionary

我是一个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的字段社区创建新行

1 个答案:

答案 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)))

将再次将单元格作为一行(制表符分隔)写入输出文件。