而不是内置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值.
而不是内置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值.