在Python中从生成器创建zip文件?

在Python中从生成器创建zip文件?,第1张

在Python中从生成器创建zip文件?

唯一的解决方案是重写用于压缩文件以从缓冲区读取的方法。将其添加到标准库中是微不足道的。我很惊讶它还没有完成。我收集到很多共识,需要对整个界面进行大修,这似乎阻碍了任何增量改进。

import zipfile, zlib, binascii, structclass 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://outofmemory.cn/zaji/5653039.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-16
下一篇 2022-12-16

发表评论

登录后才能评论

评论列表(0条)

保存