Python,使用CRLF读取CRLF文本文件

 活的精彩的人2011_373 发布于 2023-02-13 11:20

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

1 个回答
  • 而不是内置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值.

    2023-02-13 11:22 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有