我正在尝试在python 2&上测试使用csv.writer
生成的csv文件3在Linux(Ubuntu 16.04 x64)和Windows(x64)上。不幸的是,Windows每次写入文件时都会额外增加\r
。
我以为我会通过尝试在这些文件中打印repr
行来调试此问题,但repr
的输出并未显示Windows上存在\r
。
例如,来自csv文件的一行在Windows的终端中显示如下:
'display,resource,refs\n'
同一文件中的相同句子在Ubuntu上显示如下:
'display,resource,refs\r\n'
如何调试添加到我的文件中的额外\r
?
答案 0 :(得分:0)
我找到了一个名为dos2unix
的实用程序,可通过pip
安装。
要将所有\r\n
个实例转换为我的csv文件的\n
个实例,我可以使用此代码:
import os
os.system("dos2unix -n "+filename+" "+filename)
答案 1 :(得分:0)
问题是windows和linux以不同方式定义行尾标记。对于linux,它只是换行符'\n'
,但对于Windows,它是换行符,后跟回车符'\r\n'
。
当您在Windows上以Python文本模式打开文件时,任何换行符都会自动转换为'\r\n'
。这是可取的,因为Windows上的许多其他程序不会将换行符本身视为新行标记(例如记事本)。
为了解决这个问题,您可以明确告诉python您希望新行标记看起来像什么。例如
with open("text.txt", "w", newline="\n") as f:
f.write("hello\n")
f.write("world\n")
# open in binary mode so we can see exactly what is in the file
with open("text.txt", "rb") as f:
data = f.read()
print(repr(data))
assert data == b"hello\nworld\n"
如果您使用的是Python 2,则需要使用open
模块中的io
函数。