我在另一个拉链child.zip
内有一个master.zip
我想在child.zip
str.txt
结构是这样的:
- master.zip
- child.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添加到child.zip。
将文件添加到嵌套zip的最佳方法是什么?
答案 0 :(得分:0)
我在另一个zip master.zip里面有一个child.zip我想把一个文件str.txt添加到child.zip
如果可能的话,你需要完全重新考虑这个设计。
将文件添加到ZIP存档需要写入存档。但是,ZIP存档中存储的文件不可写 - 它们可以替换为新文件,但不会更新到位 - 因此无法直接将文件写入嵌套的ZIP存档。
您的代码无法正常工作,因为更新zfiledata
中的ZIP存档不会更新父存档中的相应数据。 (毕竟,它只是一个BytesIO
对象。)您需要将该数据写回父存档以保留更改。但是,正如我之前提到的,这将是一个缓慢且昂贵的操作 - 特别是如果存档很大 - 所以应该避免。