【问题标题】:How to decompress multiple file .gz chunk by chunk with python如何使用python逐块解压缩多个文件.gz
【发布时间】:2017-03-04 22:28:05
【问题描述】:

我正在尝试在下载过程中解压缩一个非常大的 .gz 文件(commoncrawl 网络提取),但 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 | ....

【问题讨论】:

    标签: python zlib gzip


    【解决方案1】:

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

    【讨论】:

    • “当你从解压对象中得到 eof”你能说得更清楚些吗? outstr[-1]== b'?'
    • d.eof 是真的。
    猜你喜欢
    • 2015-09-10
    • 1970-01-01
    • 1970-01-01
    • 2011-03-18
    • 1970-01-01
    • 1970-01-01
    • 2014-07-31
    • 1970-01-01
    相关资源
    最近更新 更多