为什么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
,所以我会检查你的情况是:
- 你的编辑器正在读取正确的DOS文件
- 你行dict的值不存在。
(请注意,即使通过\ ninput值,DictWriter也会自动引用该值。)