gpt4 book ai didi

python - 如何使用python逐 block 解压缩多个文件.gz

转载 作者:行者123 更新时间:2023-12-01 03:14:22 24 4
gpt4 key购买 nike

我试图在下载过程中解压缩一个非常大的.gz文件(commoncrawl web extract),但是zlib在第一个文件之后停止(该文件似乎是许多串联的gz文件)。

import requests,json,zlib
fn="crawl-data/CC-MAIN-2017-04/segments/1484560279933.49/warc/CC-MAIN-20170116095119-00381-ip-10-171-10-70.ec2.internal.warc.gz"
fn="https://commoncrawl.s3.amazonaws.com/"+fn
r = requests.get(fn, stream=True)
d = zlib.decompressobj(zlib.MAX_WBITS | 16)
for chunk in r.iter_content(chunk_size=2048):
if chunk:
outstr = d.decompress(chunk)
print(len(chunk),chunk[:10].hex(),len(outstr),len(d.unused_data))

所有 block 都转到“unused_data”并且不解压缩,只有第一个 block 。

通过管道传输到 zcat 时效果非常好:

curl https://commoncrawl.s3... | zcat | ....

最佳答案

你几乎已经给出了你自己问题的答案。您正在处理 gzip 流的串联(它本身就是一个有效的 gzip 流),因此当您从解压缩对象中获取 eof 时,您需要启动一个新的 decompressobj 对于每个数据,使用您在上一个数据中记下的 unused_data 开始下一个数据。

关于python - 如何使用python逐 block 解压缩多个文件.gz,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42602122/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com