Luk*_*asT 4 python eclipse csv pydev python-3.x
当我使用 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'})
Run Code Online (Sandbox Code Playgroud)
Eclipse 中的输出
名字,姓氏
烤豆类
可爱,垃圾邮件
精彩,垃圾邮件
输出在 cygwin-bash 中正确,在 Linux 上使用重定向到 cmd.exe + Windows python 中的文件时不正确(控制台窗口显然是正确的)

文档很清楚 CSV 模块需要控制换行符;在 Python 2 中,您需要以二进制模式打开文件对象,在 Python 3 中,您需要将该newline选项设置为''. 请参阅如何阻止 Python 的 csv.DictWriter.writerows 在 Windows 中的行之间添加空行?
这是因为模块\r\n默认将行分隔符写入文件。Windows 文本模式处理然后替换\n为\r\n,您会看到出现空行,因为现在各行由\r\r\n.
您可以将lineterminator参数设置'\n'为更改模块用于分隔行的内容:
writer = csv.DictWriter(sys.stdout, fieldnames=fieldnames,
lineterminator='\n')
Run Code Online (Sandbox Code Playgroud)
演示:
>>> 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'
Run Code Online (Sandbox Code Playgroud)
sys.stdout仍将其翻译\n为,\r\n但现在没有\r前面的内容。