加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

python gzipped fileinput返回二进制字符串而不是文本字符串

发布时间:2020-12-16 23:53:03 所属栏目:Python 来源:网络整理
导读:当我使用模块fileinput循环遍历一组gzip压缩文件的行时,如下所示: for line in fileinput.FileInput(files=gzipped_files,openhook=fileinput.hook_compressed): 那些行是字节字符串而不是文本字符串. 当使用模块gzip时,可以通过使用rt而不是rb打开文件来防

当我使用模块fileinput循环遍历一组gzip压缩文件的行时,如下所示:

for line in fileinput.FileInput(files=gzipped_files,openhook=fileinput.hook_compressed):

那些行是字节字符串而不是文本字符串.

当使用模块gzip时,可以通过使用’rt’而不是’rb’打开文件来防止这种情况:http://bugs.python.org/issue13989

模块fileinput是否有类似的修复,所以我可以让它返回文本字符串而不是字节字符串?我尝试添加mode =’rt’,但后来我收到此错误:

ValueError: FileInput opening mode must be one of 'r','rU','U' and 'rb'
最佳答案
您必须实现自己的openhook函数来使用编解码器打开文件:

import os

def hook_compressed_text(filename,mode,encoding='utf8'):
    ext = os.path.splitext(filename)[1]
    if ext == '.gz':
        import gzip
        return gzip.open(filename,mode + 't',encoding=encoding)
    elif ext == '.bz2':
        import bz2
        return bz2.open(filename,encoding=encoding)
    else:
        return open(filename,encoding=encoding)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读