【发布时间】:2016-01-06 11:54:36
【问题描述】:
如果我请求文件并指定 gzip 的编码,我该如何处理?
通常当我有一个大文件时,我会执行以下操作:
while True:
chunk = resp.read(CHUNK)
if not chunk: break
writer.write(chunk)
writer.flush()
其中 CHUNK 是以字节为单位的大小,writer 是一个 open() 对象,resp 是从 urllib 请求生成的请求响应。
所以大多数时候响应头包含“gzip”作为返回的编码非常简单,我会执行以下操作:
decomp = zlib.decompressobj(16+zlib.MAX_WBITS)
data = decomp.decompress(resp.read())
writer.write(data)
writer.flush()
或者这个:
f = gzip.GzipFile(fileobj=buf)
writer.write(f.read())
buf 是一个 BytesIO()。
如果我尝试解压缩 gzip 响应,我会遇到问题:
while True:
chunk = resp.read(CHUNK)
if not chunk: break
decomp = zlib.decompressobj(16+zlib.MAX_WBITS)
data = decomp.decompress(chunk)
writer.write(data)
writer.flush()
有没有一种方法可以解压缩 gzip 数据,因为它会分成小块?还是我需要将整个文件写入磁盘,解压缩然后将其移动到最终文件名?我使用 32 位 Python 时遇到的部分问题是我可能会出现内存不足错误。
谢谢
【问题讨论】:
标签: python python-3.x urllib2 urllib chunked-encoding