Python csv writer总是使用DOS行尾字符吗?

Ven*_*tta 35 python csv line-endings writer

我意识到Python 中的csv库总是生成DOS行尾字符.即使我使用该'wb'模式,即使我使用Linux.

import csv

f = open('output.txt', 'wb');
writer = csv.writer(f)
writer.writerow([2,3,4]);
f.close()
Run Code Online (Sandbox Code Playgroud)

以上代码始终'\r\n'用作行结束分隔符.我怎样才能使用它'\n'

Nik*_* B. 65

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

writer = csv.writer(f, lineterminator="\n")
Run Code Online (Sandbox Code Playgroud)


Don*_*kby 24

正如Niklas 所说,lineterminator参数允许您选择行结尾.而不是硬编码\n,通过使用平台的行分隔符使其独立于平台:os.linesep.

import csv
import os

f = open('output.csv', 'wb')
writer = csv.writer(f, lineterminator=os.linesep)
writer.writerow([2,3,4])
f.close()
Run Code Online (Sandbox Code Playgroud)

对于发现这篇文章的其他人,请不要错过'wb'.如果你在GNU/Linux等某些平台上遗漏它,你就不会发现问题,但重要的是在平台上以二进制模式打开文件,比如Windows.否则,csv文件最终可能会出现行结尾\r\r\n.如果您使用'wb'os.linesep,您的行结尾应该在所有平台上都是正确的.

  • @CiprianTomoiaga这在Python 3中不起作用。CSV模块假定它可以写普通的字符串,而如果用'wb'打开文件,情况就不再如此了(您将得到一个'TypError')。因此,在使用Python 3时,您必须像下面这样打开文件:`f = open('output.csv','w',newline =''))。另请参见[Python 3 CSV文档](https: //docs.python.org/3.5/library/csv.html#csv.writer)。 (3认同)
  • 还要考虑到 CSV 的主要用途通常是作为在不同系统之间工作的交换格式。因此,虽然使用“lineterminator=os.linesep”将生成适合该脚本运行的系统的 CSV,但这也意味着生成的 CSV 根据脚本运行的位置而有所不同;对于使用 CSV 的系统来说,这两者都不一定正确。因此,对于消费者来说,“平台独立”可能意味着坚持单一标准,而不是随着生产商的操作系统而变化。 (3认同)