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')