首页 文章

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

提问于
浏览
82

这个问题在这里已有答案:

我正在使用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)

4 回答

  • 108

    默认情况下, csv 模块中的类使用Windows样式的行终止符( \r\n )而不是Unix样式( \n ) . 这可能导致明显的双重换行吗?

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

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

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

    如果csvfile是一个文件对象,则必须在平台上使用“b”标志打开它,这会产生影响 .

    换句话说,打开文件时,您传递'wb'而不是'w' .
    您也可以使用 with 语句在写入文件时关闭该文件 .
    测试示例如下:

    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)
    
  • 30

    更改此行中的“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在上面原始帖子的评论中提供的解决方案 .

  • 0

    我刚测试了你的片段,它们在这里没有双倍间距线 . 行尾是 \r\n ,所以我在你的情况下检查的是:

    • 你的编辑器正在正确读取DOS文件

    • no \ n存在于行dict的值中 .

    (请注意,即使使用\ n放置一个值,DictWriter也会自动引用该值 . )

相关问题