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
在 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
| 归档时间: |
|
| 查看次数: |
74565 次 |
| 最近记录: |