我有一个带有Windows样式的行终止器(\r\n)的文本文件,我以通用换行符模式(Python2.7)打开它。我希望在第一次调用readline()方法之后设置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属性?
发布于 2015-04-23 19:33:34
根据佩普-0278
在通用换行符模式下打开的文件对象将获得一个新的属性“newline”,该属性反映文件中使用的换行符约定。该属性的值为None (尚未读取换行符)、"\r“、"\n”、“\r”或包含所有新行类型的元组。
例如:
>>> 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,所以它必须捕获只有在下一个迭代中“看到”的换行符类型。
https://stackoverflow.com/questions/29825570
复制相似问题