我意识到 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'
只使用?
您可以在构造函数中为您的writer
实例提供一个自定义lineterminator
参数:
writer = csv.writer(f, lineterminator="\n")
正如Niklas 回答的那样,lineterminator 参数允许您选择行尾。与其硬编码,不如'\n'
使用平台的行分隔符使其与平台无关:os.linesep
. 此外,请确保newline=''
为 Python 3 指定(请参阅此评论)。
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'
and os.linesep
,你的行尾应该在所有平台上都是正确的。