wie*_*rob 43 python windows csv line-endings python-2.x
根据其文档,csv.writer默认情况下应使用'\ r \n'作为lineterminator.
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")
Run Code Online (Sandbox Code Playgroud)
这打印
\r\n
\r\n
Run Code Online (Sandbox Code Playgroud)
正如所料.但是,创建的csv文件使用了行终止符'\ r \n\r \n'
0,1,2,3,4
0,-1,-2,-3,-4
a,b,c,d,e
A,B,C,D,E
Run Code Online (Sandbox Code Playgroud)
这是一个错误还是我使用csv.writer时出了什么问题?
Python版本:
在Win32上基于Python 2.6.2(r262:71600,2009年4月21日,15:05:37)[MSC v.1500 32位(英特尔)]的ActivePython 2.6.2.2(ActiveState Software Inc.)
在Windows Vista上
Joh*_*hin 65
在Python 2.x中,始终以二进制模式打开文件,如文档所述.按照您的预期csv写入\r\n,但随后底层的Windows文本文件机制切入并将其更改\n为\r\n...总效果:\r\r\n
从csv.writer文档:
如果csvfile是一个文件对象,则必须使用
'b'平台上的标志打开它,这会产生影响.
关于真正说出主要罪魁祸首的名字似乎有些缄默:-)
编辑:正如@jebob在对这个答案的评论中提到的并基于@Dave Burton的答案,要在Python 2和3中处理这个案例,你应该做以下事情:
if sys.version_info >= (3,0,0):
f = open(filename, 'w', newline='')
else:
f = open(filename, 'wb')
Run Code Online (Sandbox Code Playgroud)
Dav*_*ton 25
不幸的是,它与Python 3的csv模块有点不同,但是这段代码适用于Python 2和Python 3:
if sys.version_info >= (3,0,0):
f = open(filename, 'w', newline='')
else:
f = open(filename, 'wb')
Run Code Online (Sandbox Code Playgroud)
Jas*_*han 22
要在Python 2.7 csv writer中使用更改行终止符
writer = csv.writer(f, delimiter = '|', lineterminator='\n')
这是一种更简单的方法来更改\ r \n的默认分隔符.
| 归档时间: |
|
| 查看次数: |
28487 次 |
| 最近记录: |