如何用python解压缩多个文件.gz块

时间:2017-03-04 22:28:05

标签: python zlib gz

我正在尝试在下载期间解压缩一个非常大的.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))

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

管道到zcat时效果很好:

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

1 个答案:

答案 0 :(得分:2)

你几乎给出了自己问题的答案。您正在处理gzip流的串联(它本身就是一个有效的gzip流),因此当您从解压缩对象中获取eof时,您需要为每个流都启动一个新的decompressobjunused_data你从最后一个中注意到开始下一个。