什么时候`newlines`属性设置为通用换行模式?

时间:2015-04-23 13:52:10

标签: python line-endings

我有一个带有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属性?

1 个答案:

答案 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。因此,它必须仅在下一次迭代中捕获“看到”的换行符类型。