python - 使用 stdout 时,如何阻止 Python 的 csv.DictWriter.writerows 在 Windows 中的行之间添加空行?

标签 python eclipse csv python-3.x pydev

当我使用 PyDev 在 Eclipse 中运行这段代码时,我看到输出的行与行之间有空行。我怎样才能摆脱它们?它发生在仅使用 python3 时。

import csv
import sys

fieldnames = ['first_name', 'last_name']
writer = csv.DictWriter(sys.stdout, fieldnames=fieldnames)

writer.writeheader()
writer.writerow({'first_name': 'Baked', 'last_name': 'Beans'})
writer.writerow({'first_name': 'Lovely', 'last_name': 'Spam'})
writer.writerow({'first_name': 'Wonderful', 'last_name': 'Spam'})

在 Eclipse 中输出

first_name,last_name

Baked,Beans

Lovely,Spam

Wonderful,Spam

在 Linux 上的 cygwin-bash 中输出是正确的,在 cmd.exe + Windows python 中使用重定向到文件时不正确(控制台窗口显然是正确的)

Output from cmd.exe redirected to file viewed in Notepad++

最佳答案

文档非常清楚 CSV 模块需要控制换行符;在 Python 2 中,您需要以二进制模式打开文件对象,在 Python 3 中,您需要将 newline 选项设置为 ''。参见 How can I stop Python's csv.DictWriter.writerows from adding empty lines between rows in Windows?

这是因为模块默认将\r\n行分隔符写入文件。然后 Windows 文本模式处理将 \n 替换为 \r\n 并且您会看到空行出现,因为现在行由 \r\r\n< 分隔.

您可以设置 lineterminator argument'\n' 以更改模块用于分隔行的内容:

writer = csv.DictWriter(sys.stdout, fieldnames=fieldnames, 
                        lineterminator='\n')

演示:

>>> import csv
>>> from StringIO import StringIO
>>> fieldnames = ['first_name', 'last_name']
>>> out = StringIO()
>>> writer = csv.DictWriter(out, fieldnames=fieldnames)
>>> writer.writeheader()
>>> out.getvalue()
'first_name,last_name\r\n'
>>> out = StringIO()
>>> writer = csv.DictWriter(out, fieldnames=fieldnames, lineterminator='\n')
>>> writer.writeheader()
>>> out.getvalue()
'first_name,last_name\n'

sys.stdout 仍会将 \n 转换为 \r\n 但现在没有 \r在它之前。

关于python - 使用 stdout 时,如何阻止 Python 的 csv.DictWriter.writerows 在 Windows 中的行之间添加空行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27986695/

相关文章:

eclipse + m2e + junit +infinitest + eclemma?

java - 运行和调试程序 Java、Eclipse 的不同行为

android - 和引擎扩展错误

Python pandas 连接列 csv

python - 在整个磁盘中删除最旧的文件

python - 从构造函数获取变量

Python检查字典中的列表是否满足两个条件

python - h5py - 将对象动态写入文件?

来自 csv 文件的 C++ 2D vector

csv - FileHelpers 类型中的字段顺序