我有一个python脚本,在Windows机器上运行时和在Mac上运行时提供不同的输出。在深入挖掘时,我发现这是因为当Python在Mac上读取换行符(从文件中读取)时,它会在\r\n
中读取,而在某种程度上在Windows中,\r
会消失。
因此,如果我将脚本中的每个\n
更改为\r\n
,那么它在Mac上运行正常。但如果我这样做,它将停止在Windows PC上运行。
有没有一种简单的方法可以解决这个问题?
答案 0 :(得分:36)
不同的平台对“新行”有不同的代码。 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标志应该没有区别。
答案 1 :(得分:21)
我想这可能取决于你正在阅读的内容,但是内置的open()函数采用'mode'参数,如果你为模式传递'U',Python会处理换行符以透明的跨平台方式。它要求使用通用换行支持构建Python,但要测试它!
答案 2 :(得分:5)
在Python 3中,在open()中使用关键字参数“newline ='\ n'”在编写文本文件时使用指定的行分隔符。有关详细信息,请参阅:
https://pythonconquerstheuniverse.wordpress.com/2011/05/08/newline-conversion-in-python-3/
答案 3 :(得分:0)
在Windows上,如果我尝试使用两个(\ r或\ n)python中的任何一个来编写文件,它们都可以正常工作,在两种情况下都将它解释为换行符。使用" \ r \ n"时,它被解释为双行中断。(Windows上的Python 3)
答案 4 :(得分:0)
在Python 3中,Open()
方法具有一个newline
参数:
换行符控制通用换行符模式的工作方式(仅适用于 文字模式)。可以是“无”,“”,“ \ n”,“ \ r”和“ \ r \ n”。它作为 如下:
从流中读取输入时,如果换行为None,则为通用 换行模式已启用。输入中的行可以以'\ n','\ r'或 '\ r \ n',并且在返回之前将其转换为'\ n' 呼叫者,召集者。如果为”,则启用通用换行模式,但行 结束语未翻译地返回给呼叫者。如果有 其他合法值,输入行仅由给定终止 字符串,并且行尾未经翻译返回给调用方。
将输出写入流时,如果换行为None,则任何'\ n' 写入的字符将转换为系统默认行 分隔符,os.linesep。如果换行符是''或'\ n',则无需翻译 地点。如果换行符是其他任何合法值,则任何'\ n' 写入的字符将转换为给定的字符串。
不赞成使用旧的使用U
模式说明符的方法,而推荐使用这种新方法。
“ U”通用换行模式(不建议使用)