当我使用模块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)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。