我在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”都有相同的行为?
答案 0 :(得分:6)
您之间的观察是因为\r\n
是Windows上的行终止符,因此t
模式会将其转换为\n
。在Unix(这里是MacOS)上,t
不会影响\r\n
,也没有转换。 t
和U
之间的区别在于U
会在每个平台上将\r\n
和\r
转换为\n
,而t
则为平台依赖,仅转换给定平台的LT。
将测试字符串替换为"One\r\nTwo\nThree\rFour"
以查看U
的效果。
答案 1 :(得分:0)
This文档解释了它。
基本上,当您以文本文件(不带'b'
)打开时,文本文件中的行尾字符会在读取或写入数据时自动更改。如果您不想这样,请使用二进制模式。