在Mac与Windows上的python中处理\ r \n与\n \n换行符

wro*_*ame 33 python windows macos python-2.x

我有一个python脚本,当在Windows机器上运行时和在Mac上运行时提供不同的输出.在深入挖掘时,我发现这是因为当Python在Mac上读取换行符(从文件中读取)时,它会读入\r\n,而在Windows中以某种方式\r消失.

因此,如果我\n将脚本中的每个更改为\r\n,它在Mac上运行正常.但如果我这样做,它就会停止在Windows PC上运行.

有没有一种简单的方法来解决这个问题?

Len*_*bro 37

不同的平台对"新线"有不同的代码.Windows有\ r \n,Unix有\n,旧的mac有\ r和是,有些系统也有\n\r \n.

当您在Python 3中以文本模式打开文件时,它会将所有换行转换为'\n'并完成它.

infile = open("filename", 'r')
Run Code Online (Sandbox Code Playgroud)

文本模式是默认的,所以如果你什么都不说,那就是文本模式.但是明确表达总是更好:

infile = open("filename", 'rt')
Run Code Online (Sandbox Code Playgroud)

如果您不希望发生行结尾的转换,请以二进制模式打开文件:

infile = open("filename", 'rb')
Run Code Online (Sandbox Code Playgroud)

在Python 2中它是不同的.这种转换只会在Windows上默认发生.如果您希望它在其他平台上发生,您可以添加通用换行标志:

infile = open("filename", 'rU')
Run Code Online (Sandbox Code Playgroud)

但是,你说你使用的是Python 3,并且它在所有平台上以文本模式发生,因此添加U标志应该没有区别.


jon*_*esy 21

我想这可能取决于你正在读什么,但是内置的open()函数采用'mode'参数,如果你为模式传递'U',Python会处理十字架中的换行符-platform方式透明.它要求使用通用换行支持构建Python,但要测试它!

http://docs.python.org/library/functions.html#open

  • @Falmarri:它在Python 3中是*默认值,实际上,在Python 3中不推荐使用U标志. (6认同)

jdh*_*hao 6

在 Python 3 中,该Open()方法有一个newline参数:

换行符控制通用换行符模式的工作方式(它仅适用于文本模式)。它可以是 None、''、'\n'、'\r' 和 '\r\n'。它的工作原理如下:

从流中读取输入时,如果换行符为 None,则启用通用换行符模式。输入中的行可以以 '\n'、'\r' 或 '\r\n' 结尾,这些在返回给调用者之前会被转换为 '\n'。如果是 '',则启用通用换行符模式,但行尾会返回给调用者未翻译。如果它具有任何其他合法值,则输入行仅由给定的字符串终止,并且行尾未翻译地返回给调用者。

将输出写入流时,如果换行符为 None,则写入的任何 '\n' 字符将转换为系统默认行分隔符 os.linesep。如果换行符是 '' 或 '\n',则不进行转换。如果换行符是任何其他合法值,则写入的任何 '\n' 字符都将转换为给定的字符串。

使用U模式说明符的旧方式已被弃用,取而代之的是这种新方式。

'U' 通用换行符模式(已弃用)


小智 5

在Python 3中,在open()中使用关键字参数"newline ='\n'"在编写文本文件时使用指定的行分隔符.有关更多信息,请参阅:

https://pythonconquerstheuniverse.wordpress.com/2011/05/08/newline-conversion-in-python-3/

http://docs.python.org/3/library/functions.html#open