我意识到 Python 中的 csv 库总是生成 DOS 的行尾字符,即使我使用 'wb'
模式,甚至在 Linux 中也是如此。
import csv
f = open('output.txt', 'wb');
writer = csv.writer(f)
writer.writerow([2,3,4]);
f.close()
以上代码总是使用'\r\n'
作为行结束符。如何让它只使用'\n'
?
我意识到 Python 中的 csv 库总是生成 DOS 的行尾字符,即使我使用 'wb'
模式,甚至在 Linux 中也是如此。
import csv
f = open('output.txt', 'wb');
writer = csv.writer(f)
writer.writerow([2,3,4]);
f.close()
以上代码总是使用'\r\n'
作为行结束符。如何让它只使用'\n'
?
lineterminator
的文档链接,它会告诉您它是一个字符串,默认值为'\r\n'
。所以是的。 - LarsH如Niklas的回答所述,lineterminator参数可让您选择行结尾。不要将其硬编码为'\n'
,而是使用您平台的行分隔符使其与平台无关:os.linesep
。另外,在Python 3 中,请确保指定newline=''
(请参见此评论)。
import csv
import os
with open('output.csv', 'w', newline='') as f:
writer = csv.writer(f, lineterminator=os.linesep)
writer.writerow([2, 3, 4])
在Python 2中,使用'wb'
模式(请参阅文档)。
import csv
import os
with open('output.csv', 'wb') as f:
writer = csv.writer(f, lineterminator=os.linesep)
writer.writerow([2, 3, 4])
对于其他人,如果您仍在使用Python 2,请不要错过'wb'
。(在Python 3中,此问题由Python处理)。如果您在某些平台上(如GNU / Linux)缺少它,您可能不会注意到问题,但在那些关键的平台上,例如Windows上,以二进制模式打开文件非常重要。否则,csv文件的行末可能会出现像\r\r\n
这样的行尾符。如果您使用'wb'
和os.linesep
,则在所有平台上,您的行末应该正确无误。
wb
,则会出现writer.writeheader()
的错误。 - Ciprian Tomoiagăwriter
和DictWriter
与wb
,@CiprianTomoiaga,对我来说它可以正常工作。我建议您发布一个新问题,并附上代码示例和错误消息,然后在此处添加一个链接到您的问题的评论。 - Don Kirkbyf = open('output.csv', 'w', newline='')
。还请参阅Python 3 CSV文档。 - maxschlepziglineterminator=os.linesep
会产生适合于运行脚本的系统的 CSV,但这也意味着所产生的 CSV 取决于脚本运行的位置而会有所不同;这两种情况都不一定适用于消费 CSV 的系统。因此,“平台无关”对于消费者来说可能意味着坚持单一标准,而不是随着生产者的操作系统而变化。 - LarsH