通用换行模式是否应该是Python 2.7中open()的默认行为?

时间:2012-08-30 08:43:03

标签: python python-2.7

我在Windows 7上运行Python 2.7.2(64位)。我对此处记录的“通用换行模式”感到有些困惑:http://docs.python.org/library/functions.html#open

除非在open()的mode参数中指定'U',否则从文档中看起来“通用换行模式”不应该有效。但是我认为这是默认行为!文档确实具有误导性,或者我遗漏了什么?

f = open("c:/Temp/test.txt", "wb")
f.write("One\r\nTwo\r\nThree\r\nFour"); f.close()

f = open("c:/Temp/test.txt", "rb")
f.read(); f.close()
'One\r\nTwo\r\nThree\r\nFour'

f = open("c:/Temp/test.txt", "r")
f.read(); f.close()
'One\nTwo\nThree\nFour'

f = open("c:/Temp/test.txt", "rt")
f.read(); f.close()
'One\nTwo\nThree\nFour'

f = open("c:/Temp/test.txt", "rU")
f.read(); f.close()
'One\nTwo\nThree\nFour'

似乎“r”,“rt”,“rU”都有相同的行为?

2 个答案:

答案 0 :(得分:6)

您之间的观察是因为\r\n是Windows上的行终止符,因此t模式会将其转换为\n。在Unix(这里是MacOS)上,t不会影响\r\n,也没有转换。 tU之间的区别在于U会在每个平台上将\r\n\r转换为\n,而t则为平台依赖,仅转换给定平台的LT。

将测试字符串替换为"One\r\nTwo\nThree\rFour"以查看U的效果。

答案 1 :(得分:0)

This文档解释了它。

基本上,当您以文本文件(不带'b')打开时,文本文件中的行尾字符会在读取或写入数据时自动更改。如果您不想这样,请使用二进制模式。