以下是情况:
我从亚马逊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()
问题
如何直接解压缩流并读取内容?
我不想创建临时文件,它们看起来不好。
dec = zlib.decompressobj(32 + zlib.MAX_WBITS); for chunk in app.s3_client.get_object(Bucket=bucket, Key=key)["Body"].iter_chunks(2 ** 19): data = dec.decompress(chunk); print(len(data));
输出65505,然后是0、0、0、0、0、……这可能与iter_chunks()
有关吗? - WillJonesdec.flush()
来确保不会错过任何数据吗? - Michal Charemzaif dec.unused_data: yield dec.flush()
。 - Martijn Pieters