python - 在 Python 3 中使用 io.BufferedReader 快速读取 gzip(文本文件)

标签 python python-3.x gzip bufferedreader

我正在尝试使用 gzip 模块有效地读入和解析压缩的文本文件。这link建议使用 io.BufferedReader 包装 gzip 文件对象,如下所示:

import gzip, io
gz = gzip.open(in_path, 'rb')
f = io.BufferedReader(gz)
     for line in f.readlines():
         # do stuff
gz.close()

要在 Python 3 中执行此操作,我认为必须使用 mode='rb' 调用 gzip。所以结果是 line 是一个二进制字符串。但是,我需要 line 为文本/ascii 字符串。是否有更有效的方法使用 BufferedReader 将文件作为文本字符串读取,或者我是否必须在 for 循环内解码 line

最佳答案

您可以使用 io.TextIOWrapper 将二进制流无缝包装为文本流:

f = io.TextIOWrapper(gz)

或者正如@ShadowRanger 所指出的,您可以简单地以文本模式打开 gzip 文件,这样 gzip 模块将为您应用 io.TextIOWrapper 包装器:

for line in gzip.open(in_path, 'rt'):
    # do stuff

关于python - 在 Python 3 中使用 io.BufferedReader 快速读取 gzip(文本文件),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54619903/

相关文章:

python - Scikit-image:无法导入名称 'label'

gzip - 在 Python 3 中解压缩 gzip 服务器响应的最佳方法是什么?

python - Perl 相当于 python 编码和 gzip

python - 可以在 Django {% ifequal %} 表达式中使用带有查找的变量吗?

python - 如何在rpython程序中导入rlib以使用pypy的rpython进行翻译

python - 将Matlab代码转换为Python时的"data type not understood"

python - 在 re.search 中返回 NoneType 与返回 ""

django - 请澄清 Django 媒体、静态和模板文件位置的约定

python - 如何从 https ://github. com/ONSBigData/parsing_company_accounts 在服务器上安装 xbrl_parser?

nginx - 替换来自代理的压缩响应中的文本