我在另一个 zip master.zip
里有一个child.zip
我想为子项添加文件str.txt
.zip
结构是这样的:
- 师父.zip
- 孩子.zip
- str.txt
这是我的尝试:
def writeadapt():
with zipfile.ZipFile('master.zip','a', zipfile.ZIP_DEFLATED) as zfile:
for name in zfile.namelist():
if re.search(r'.zip$', name ) != None:
zfiledata = io.BytesIO(zfile.read(name))
with zipfile.ZipFile(zfiledata , 'a', zipfile.ZIP_DEFLATED) as zfile2:
zfile2.writestr('str.txt',"hello")
zfile2.close()
该代码不会将文件 str.txt 添加到子.zip。
将文件添加到嵌套zip的最佳方法是什么?
我有一个孩子.zip在另一个 zip 母版中.zip我想为孩子添加一个文件 str.txt.zip
如果可能的话,你需要完全重新考虑这个设计。
将文件添加到 ZIP 存档需要写入存档。但是,存储在ZIP存档中的文件是不可写的 - 它们可以替换为新文件,但不能就地更新 - 因此不可能直接将文件写入嵌套的ZIP存档。
您的代码未按预期工作,因为更新 zfiledata
中的 ZIP 存档不会更新父存档中的相应数据。(毕竟,它只是一个BytesIO
对象。您需要将该数据写回父存档以保留更改。但是,正如我之前所指出的,这将是一个缓慢而昂贵的操作 - 特别是如果存档很大 - 因此应该避免。