内容简介:我有大量的数据(几个gig),我需要写一个zip文件在Python.我无法一次性将其全部加载到内存中以传递到ZipFile的.writestr方法,而我真的不想使用临时文件将其全部输出到磁盘上,然后将其读回来.有没有办法将生成器或类似文件的对象提供给ZipFile库?还是有一些原因,这种能力似乎不被支持?通过zip文件,我的意思是zip文件.在Python zipfile包中支持.
我有大量的数据(几个gig),我需要写一个zip文件在Python.我无法一次性将其全部加载到内存中以传递到ZipFile的.writestr方法,而我真的不想使用临时文件将其全部输出到磁盘上,然后将其读回来.
有没有办法将生成器或类似文件的对象提供给ZipFile库?还是有一些原因,这种能力似乎不被支持?
通过zip文件,我的意思是zip文件.在Python zipfile包中支持.
唯一的解决方案是重写用于压缩文件以从缓冲区读取的方法.将它添加到标准库中将是微不足道的;我很惊讶,还没有完成.我收集了很多协议,整个接口需要进行大修,似乎阻止了任何增量的改进.
import zipfile, zlib, binascii, struct
class BufferedZipFile(zipfile.ZipFile):
def writebuffered(self, zipinfo, buffer):
zinfo = zipinfo
zinfo.file_size = file_size = 0
zinfo.flag_bits = 0x00
zinfo.header_offset = self.fp.tell()
self._writecheck(zinfo)
self._didModify = True
zinfo.CRC = CRC = 0
zinfo.compress_size = compress_size = 0
self.fp.write(zinfo.FileHeader())
if zinfo.compress_type == zipfile.ZIP_DEFLATED:
cmpr = zlib.compressobj(zlib.Z_DEFAULT_COMPRESSION, zlib.DEFLATED, -15)
else:
cmpr = None
while True:
buf = buffer.read(1024 * 8)
if not buf:
break
file_size = file_size + len(buf)
CRC = binascii.crc32(buf, CRC) & 0xffffffff
if cmpr:
buf = cmpr.compress(buf)
compress_size = compress_size + len(buf)
self.fp.write(buf)
if cmpr:
buf = cmpr.flush()
compress_size = compress_size + len(buf)
self.fp.write(buf)
zinfo.compress_size = compress_size
else:
zinfo.compress_size = file_size
zinfo.CRC = CRC
zinfo.file_size = file_size
position = self.fp.tell()
self.fp.seek(zinfo.header_offset + 14, 0)
self.fp.write(struct.pack("<LLL", zinfo.CRC, zinfo.compress_size, zinfo.file_size))
self.fp.seek(position, 0)
self.filelist.append(zinfo)
self.NameToInfo[zinfo.filename] = zinfo
http://stackoverflow.com/questions/297345/create-a-zip-file-from-a-generator-in-python
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Visual Thinking
Colin Ware / Morgan Kaufmann / 2008-4-18 / USD 49.95
Increasingly, designers need to present information in ways that aid their audiences thinking process. Fortunately, results from the relatively new science of human visual perception provide valuable ......一起来看看 《Visual Thinking》 这本书的介绍吧!