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

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

因此,如果我将脚本中的每个\n都更改为\r\n ,则在Mac上可以正常工作。 但是,如果我这样做,它停止在Windows PC上工作。

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

我想这可能取决于你正在阅读的内容,但是内建的open()函数需要一个'mode'参数,如果你传递了'U'这个模式,Python将处理十字中的换行符平台方式透明。 它要求用通用的新行支持来构建Python,但要测试一下!

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

不同的平台对于“新行”有不同的代码。 Windows有\ r \ n,Unix有\ n,旧的Mac有\ r并且有一些系统也有\ n \ r。

当你在Python 3中以文本模式打开一个文件时,它将把所有的换行符转换成'\ n'并完成它。

 infile = open("filename", 'r') 

文本模式是默认的,所以如果你什么都不说,就是文本模式。 但是明确地说:

 infile = open("filename", 'rt') 

如果您不希望翻译行结束,请以二进制模式打开文件:

 infile = open("filename", 'rb') 

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

 infile = open("filename", 'rU') 

但是,你说你在使用Python 3,而且在所有平台上都是以文本模式发生的,所以添加U标志应该没有什么区别。

在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