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

通用换行符模式应该是Python 2.7中open()的默认行为吗?,python,python-2.7,Python,Python 2.7,我正在Windows7上运行Python 2.7.2(64位)。我对这里记录的“通用换行模式”有点困惑: 从文档中可以看出,除非在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.tx

我正在Windows7上运行Python 2.7.2(64位)。我对这里记录的“通用换行模式”有点困惑:

从文档中可以看出,除非在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”都有相同的行为?

文档对此进行了解释


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

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


将测试字符串替换为“一\r\n两\n三\r四”以查看
U
的效果,谢谢!另一方面,文档中说,“Python通常是使用通用换行符支持构建的”。有没有一种编程方法可以确定它是否是使用通用换行符支持构建的?@PuneetArora:是的,请参阅相关注释中的
newlines
属性,文档中说,“Python通常是使用通用换行符支持构建的”。是否有一种程序化的方法来确定它是否是使用通用换行符支持构建的?