我有一个带有Windows样式行终止符(\r\n
)的文本文件,我以通用换行符模式(Python 2.7)打开。我希望在第一次调用newlines
方法后设置readline()
属性,但显然情况并非如此:
>>> f=open('test_crlf', 'rU')
>>> f.newlines
>>> f.readline()
'foo\n'
>>> f.newlines
>>> f.readline()
'bar\n'
>>> f.newlines
'\r\n'
另一方面,newlines
属性在第一次调用具有Unix样式行结尾的文件readline()
之后设置。
一般规则是什么?我应该何时应该设置newlines
属性?
答案 0 :(得分:2)
根据pep-0278
以通用换行模式打开的文件对象获取 一个新属性“newlines”,它反映了换行符惯例 在文件中使用。此属性的值是None(no。)之一 newline read yet),“\ r”,“\ n”,“\ r \ n”或包含所有内容的元组 看到换行类型。
举个例子:
>>> fp = open('test.txt', 'wb')
>>> fp.write('a line ending with a cr \r')
>>> fp.write('a line ending with an lf \n')
>>> fp.write('a line ending with a crlf \r\n')
>>> fp.close()
>>> fp = open('test.txt', 'rU')
>>> fp.newlines
>>> fp.readline()
'a line ending with a cr \n'
>>> fp.newlines
>>> fp.readline()
'a line ending with an lf \n'
>>> fp.newlines
('\r', '\n')
>>> fp.readline()
'a line ending with a crlf \n'
>>> fp.newlines
('\r', '\n')
>>> fp.readline()
''
>>> fp.newlines
('\r', '\n', '\r\n')
正如您所看到的,只有在返回''的最后一个readline()之后,才会实际注册\ r \ n。因此,它必须仅在下一次迭代中捕获“看到”的换行符类型。