with open(fn, 'rt') as f:
lines = f.readlines()它读取有LF行结束的CR文本文件(WinXP,Py2.6)。所以lines包含'\n‘末端。如何按原样获得行:
发布于 2013-12-03 11:57:31
不要使用内置的open()函数,而是使用io.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值。
https://stackoverflow.com/questions/20350305
复制相似问题