一尘不染

Python解压缩字节流?

python

情况如下:

  • 我从Amazon S3获取gzip压缩的xml文档
        import boto
    from boto.s3.connection import S3Connection
    from boto.s3.key import Key
    conn = S3Connection('access Id', 'secret access key')
    b = conn.get_bucket('mydev.myorg')
    k = Key(b)
    k.key('documents/document.xml.gz')
  • 我以文件形式阅读它们
        import gzip
    f = open('/tmp/p', 'w')
    k.get_file(f)
    f.close()
    r = gzip.open('/tmp/p', 'rb')
    file_content = r.read()
    r.close()

如何直接解压缩流并读取内容?

我不想创建临时文件,它们看起来不太好。


阅读 138

收藏
2020-12-20

共1个答案

一尘不染

是的,您可以使用该zlib模块解压缩字节流:

    import zlib

    def stream_gzip_decompress(stream):
        dec = zlib.decompressobj(32 + zlib.MAX_WBITS)  # offset 32 to skip the header
        for chunk in stream:
            rv = dec.decompress(chunk)
            if rv:
                yield rv

zlib标头的32个偏移量表示gzip标头是预期的但已跳过。

S3键对象是一个迭代器,因此您可以执行以下操作:

    for data in stream_gzip_decompress(k):
        # do something with the decompressed data

2020-12-20