首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python,按原样读取CRLF文本文件,并使用CRLF

Python,按原样读取CRLF文本文件,并使用CRLF
EN

Stack Overflow用户
提问于 2013-12-03 11:47:00
回答 1查看 22.1K关注 0票数 17
代码语言:javascript
复制
with open(fn, 'rt') as f:
    lines = f.readlines()

它读取有LF行结束的CR文本文件(WinXP,Py2.6)。所以lines包含'\n‘末端。如何按原样获得行:

  • 对于CRLF文件,获取“\n\r”结尾的行
  • 对于LF文件,获取“\n”结尾的行
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-12-03 11:57:31

不要使用内置的open()函数,而是使用io.open()。这使您可以更多地控制如何使用newline参数处理换行符:

代码语言:javascript
复制
import io

with io.open(fn, 'rt', newline='') as f:
    lines = f.readlines()

newline设置为空字符串,将启用通用换行符支持,但返回行尾未翻译;您仍然可以使用.readlines()查找任何合法行终止符终止的行,但返回的数据与文件中的数据完全相同:

在输入时,如果换行符是None,则启用通用换行符模式。输入中的行可以以'\n''\r''\r\n'结尾,这些行在返回给调用者之前被翻译成'\n'。如果是'',则启用通用换行符模式,但行结束将返回给调用者未翻译的

强调我的。

这与在二进制模式下打开文件不同,在二进制模式下,.readlines()只对\n字符拆分文件。对于带有\r行尾或混合行尾的文件,这意味着行将不能正确拆分。

演示:

代码语言:javascript
复制
>>> 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值。

票数 30
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20350305

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档