Python 2 CSV编写器在Windows上产生错误的行结束符

根据其文档, csv.writer默认使用“\ r \ n”作为行列式。

import csv with open("test.csv", "w") as f: writer = csv.writer(f) rows = [(0,1,2,3,4), (-0,-1,-2,-3,-4), ("a","b","c","d","e"), ("A","B","C","D","E")] print writer.dialect.lineterminator.replace("\r", "\\r").replace("\n", "\\n") writer.writerows(rows) print writer.dialect.lineterminator.replace("\r", "\\r").replace("\n", "\\n") 

这打印

 \r\n \r\n 

如预期。 但是,创build的csv文件使用了终结符'\ r \ r \ n'

 0,1,2,3,4 0,-1,-2,-3,-4 a,b,c,d,e A,B,C,D,E 

这是一个错误,或者在我的csv.writer的使用有什么问题吗?

Python版本:

基于Python 2.6.2的ActivePython 2.6.2.2(ActiveState Software Inc.)(r262:71600,2009年4月21日,15:05:37)[win32上的MSC v.1500 32位(Intel)]

在Windows Vista上

在Python 2.x中,如文档所述,始终以二进制模式打开文件。 csv按照您的预期写入\r\n ,但是接下来的Windows文本文件机制切入并将\n更改为\r\n …总效果: \r\r\n

csv.writer文档:

如果csvfile是一个文件对象,那么必须在平台上用'b'标志打开,这是有所作为的

实际上说出主要罪魁祸首的名字似乎有些沉默:-)

在Python 2.7 csv编写器中使用改变行结束符

writer = csv.writer(f, delimiter = '|', lineterminator='\n')

这是从\ r \ n更改默认分隔符的简单方法。

不幸的是,它与Python 3的csv模块有点不同,但是这个代码可以同时用于Python 2和Python 3:

 if sys.version_info >= (3,0,0): f = open(filename, 'w', newline='') else: f = open(filename, 'wb')