Windows 上的__repr__在终端中不显示回车符



我正在尝试在Linux(Ubuntu 16.04 x64)和Windows(x64)上的python 2和3上测试使用csv.writer生成的csv文件。不幸的是,Windows 每次写入文件时都会添加一个额外的r

我以为我会通过尝试打印这些文件repr行来调试它,但repr的输出没有显示 Windows 上存在r

例如,csv 文件中的一行在 Windows 的终端中显示为:

'display,resource,refsn'

来自同一文件的相同句子在 Ubuntu 上显示为:

'display,resource,refsrn'

我怎样才能调试添加到我的文件中的这些额外r

我找到了一个名为dos2unix实用程序,可通过pip安装。

要将rn的所有实例转换为 csv 文件的n实例,我可以使用以下代码:

import os
os.system("dos2unix -n "+filename+" "+filename)

问题是Windows和Linux对行尾标记的定义不同。对于linux来说,它只是换行'n',但对于Windows来说,它是换行,然后是回车'rn'

当您在 Windows 上的 Python 中打开文件以文本模式写入时,任何换行符都会自动转换为'rn'。这是可取的,因为 Windows 上的许多其他程序不会将换行符本身视为新行标记(例如记事本)。

为了解决这个问题,你可以明确地告诉python你想要新的行标记是什么样子。

with open("text.txt", "w", newline="n") as f:
f.write("hellon")
f.write("worldn")
# 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"hellonworldn" 

如果您使用的是 Python 2,则需要改用io模块中的open函数。

最新更新