54

我意识到 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'只使用?

4

2 回答 2

89

您可以在构造函数中为您的writer实例提供一个自定义lineterminator参数:

writer = csv.writer(f, lineterminator="\n")
于 2012-03-23T19:58:12.383 回答
30

正如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)

在 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,你的行尾应该在所有平台上都是正确的。

于 2015-04-30T19:24:05.787 回答