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



我正在尝试使用 gzip 模块有效地读入和解析压缩的文本文件。此链接建议使用 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

最新更新