使用 Python 中的 io.BufferedReader 快速读取 gzip(文本文件) 3
Fast reading of gzip (text file) using io.BufferedReader in Python 3
我正在尝试使用 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()
要在Python3中做到这一点,我认为gzip
必须用mode='rb'
调用。所以结果是 line
是一个二进制字符串。但是,我需要 line
成为 text/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
我正在尝试使用 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()
要在Python3中做到这一点,我认为gzip
必须用mode='rb'
调用。所以结果是 line
是一个二进制字符串。但是,我需要 line
成为 text/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