【发布时间】:2019-02-10 18:59:50
【问题描述】:
我正在尝试使用 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?
【问题讨论】:
-
旁注:不要这样做
for line in f.readlines():。这不必要地立即将文件放入list行中,迭代list,然后将其丢弃。这意味着您无缘无故地需要与文件(未压缩)大小成比例的内存。只需执行for line in f:,然后根据需要懒惰地获取线路。
标签: python python-3.x gzip bufferedreader