如果我请求一个文件并指定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的问题之一是,我可能会遇到内存错误。
谢谢
del data
有什么作用? - Janosh