4

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

从文档看来,除非在 open() 的模式参数中指定了“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”都有相同的行为?

4

2 回答 2

6

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

替换您的测试字符串以"One\r\nTwo\nThree\rFour"查看U.

于 2012-08-30T08:54:00.400 回答
0

文档对此进行了解释。

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

于 2012-08-30T08:49:21.440 回答