为什么CSV文件在Python中用Dictwriter输出时在每个数据行之间包含一个空白行

我正在使用DictWriter将字典中的数据输出到csv文件。 为什么每个数据行之间的CSV文件都有空行? 这不是什么大问题,但是我的数据集很大,不适合放入一个csv文件,因为它的行数太多,因为“双倍行距”会使文件行数加倍。

我写的字典的代码是:

headers=['id', 'year', 'activity', 'lineitem', 'datum'] output = csv.DictWriter(open('file3.csv','w'), delimiter=',', fieldnames=headers) output.writerow(dict((fn,fn) for fn in headers)) for row in rows: output.writerow(row) 

默认情况下, csv模块中的类使用Windows风格的行结束符( \r\n )而不是Unix风格( \n )。 这可能是什么导致明显的双重换行符?

如果是这样,你可以在DictWriter构造函数中覆盖它:

 output = csv.DictWriter(open('file3.csv','w'), delimiter=',', lineterminator='\n', fieldnames=headers) 

http://docs.python.org/library/csv.html#csv.writer

如果csvfile是一个文件对象,那么它必须在平台上用“b”标志打开。

换句话说,打开文件时,你传递'wb'而不是'w'。
写完之后,还可以使用with语句closures文件。
testing示例如下:

 from __future__ import with_statement # not necessary in newer versions import csv headers=['id', 'year', 'activity', 'lineitem', 'datum'] with open('file3.csv','wb') as fou: # note: 'wb' instead of 'w' output = csv.DictWriter(fou,delimiter=',',fieldnames=headers) output.writerow(dict((fn,fn) for fn in headers)) output.writerows(rows) 

在这一行中改变'w'(写):

 output = csv.DictWriter(open('file3.csv','w'), delimiter=',', fieldnames=headers) 

为了'wb'(写入二进制文件)为我解决了这个问题:

 output = csv.DictWriter(open('file3.csv','wb'), delimiter=',', fieldnames=headers) 

Python v2.75:Open()

感谢@dandrejvv在上面的原始post的评论中的解决scheme。

我只是testing了你的代码片段,而且在这里没有双倍的间距。 行尾是\r\n ,所以我会检查你的情况是:

  1. 你的编辑器正在读取正确的DOS文件
  2. 你行dict的值不存在。

(请注意,即使通过\ ninput值,DictWriter也会自动引用该值。)