下面的片段为我工作(从ZIP档案删除所有* .exe文件):
zin = zipfile.ZipFile ('archive.zip', 'r')
zout = zipfile.ZipFile ('archve_new.zip', 'w')
for item in zin.infolist():
buffer = zin.read(item.filename)
if (item.filename[-4:] != '.exe'):
zout.writestr(item, buffer)
zout.close()
zin.close()
如果你读到的一切到内存中,可以消除对第二个文件的需要。然而,这段代码重新压缩了一切。
仔细检查后,ZipInfo.header_offset
是从文件开始的偏移量。名称具有误导性,但Zip主标题实际上存储在文件末尾。我的十六进制编辑器确认这一点
因此,您遇到的问题如下:您还需要删除主标题中的目录条目,否则它将指向不存在的文件。如果你保留你正在删除的文件的本地头文件,保持主头文件完好无损,但我不确定。你是怎么用旧模块做的?
没有修改主标题,当我打开它时,出现“zipfile中缺少X字节”的错误。 This可能会帮助您了解如何修改主标题。
来源
2009-02-04 23:31:37
mdm
我发现Python的bug跟踪讨论从一个zip文件中删除文件的难点该线程:HTTPS://bugs.python。 org/issue6818 – 2016-12-09 21:26:45