with open(fn, 'rt') as f:
lines = f.readlines()
这将读取带有LF行结束的CR LF文本文件(WinXP,Py 2.6)。所以lines
包含'\ n'末尾。如何获得行:
答案 0 :(得分:18)
使用io.open()
代替内置open()
功能。这使您可以更好地控制使用newline
参数处理换行的方式:
import io
with io.open(fn, 'rt', newline='') as f:
lines = f.readlines()
将newline
设置为空字符串,启用通用换行支持但返回行结尾未翻译;您仍然可以使用.readlines()
查找以任何合法行终止符终止的行,但返回的数据与文件中的数据完全相同:
在输入时,如果换行符为
None
,则启用通用换行符模式。输入中的行可以'\n'
,'\r'
或'\r\n'
结尾,并在返回给调用者之前将其转换为'\n'
。如果是''
,则启用通用换行模式,但行结尾将返回给未翻译的调用者。
强调我的。
这与以二进制模式打开文件不同,.readlines()
只会在\n
个字符上拆分文件。对于具有\r
行结尾或混合行结尾的文件,这意味着不会正确分割行。
演示:
>>> import io
>>> open('test.txt', 'wb').write('One\nTwo\rThree\r\n')
>>> open('test.txt', 'rb').readlines()
['One\n', 'Two\rThree\r\n']
>>> io.open('test.txt', 'r', newline='').readlines()
[u'One\n', u'Two\r', u'Three\r\n']
请注意,io.open()
还会将文件内容解码为unicode值。