簡體   English   中英

使用stdout時,如何阻止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?

當我使用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中使用重定向到文件時輸出不正確(控制台窗口顯然是正確的)

從cmd.exe的輸出重定向到在記事本++中查看的文件

文檔非常清楚,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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM