将文件添加到嵌套的 zip python



我在另一个 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对象。您需要将该数据写回父存档以保留更改。但是,正如我之前所指出的,这将是一个缓慢而昂贵的操作 - 特别是如果存档很大 - 因此应该避免。

最新更新