使用标准输出时,如何阻止 Python 的 csv.DictWriter.writerows 在 Windows 中的行之间添加空行?
How can I stop Python's csv.DictWriter.writerows from adding empty lines between rows in Windows when using stdout?
当我在 Eclipse 中使用 PyDev 运行 这段代码时,我看到输出的行与行之间有空行。我怎样才能摆脱它们?它发生在仅使用 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
在 cygwin-bash 中输出正确,在 Linux 中使用重定向到 cmd.exe + Windows python 中的文件时不正确(控制台 window 显然是正确的)
文档非常清楚 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
。
当我在 Eclipse 中使用 PyDev 运行 这段代码时,我看到输出的行与行之间有空行。我怎样才能摆脱它们?它发生在仅使用 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
在 cygwin-bash 中输出正确,在 Linux 中使用重定向到 cmd.exe + Windows python 中的文件时不正确(控制台 window 显然是正确的)
文档非常清楚 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
。