[英]How can I stop Python's csv.DictWriter.writerows from adding empty lines between rows in Windows?
[英]How can I stop Python's csv.DictWriter.writerows from adding empty lines between rows in Windows when using stdout?
當我使用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中輸出
名字,姓氏
烤,豆
可愛,垃圾郵件
太好了,垃圾郵件
在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')
演示:
>>> 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
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.