在只读 gzip 流中实现搜索

问题描述 投票:0回答:0

我有一个在

.gz
类文件对象中搜索的应用程序。

Python 的

gzip.GzipFile
支持这一点,但效率很低——当 GzipFile 对象被要求返回时,它将倒回到流的开头 (
seek(0)
),然后读取并解压缩所有内容,直到所需的偏移量。

不用说,在寻找大型

tar.gz
文件(数十GB)时,这绝对会降低性能。

所以我希望实现检查点:时不时地存储流状态,当被要求返回时,只转到下一个先前存储的检查点,而不是一直倒回开头。

我的问题是围绕

gzip
/
zlib
实现:“当前解压器状态”由什么组成?它存储在哪里?有多大?

我如何从打开的 GzipFile 对象中复制该状态,然后将其分配回去以进行“向后跳转”搜索?


注意我无法控制输入的 .gz 文件。解决方案必须严格针对 GzipFile 只读

rb
模式。

python gzip zlib python-3.10
© www.soinside.com 2019 - 2024. All rights reserved.