将文件添加到嵌套的zip python中

时间:2017-11-13 20:50:19

标签: python nested zip

我在另一个拉链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的最佳方法是什么?

1 个答案:

答案 0 :(得分:0)

  

我在另一个zip master.zip里面有一个child.zip我想把一个文件str.txt添加到child.zip

如果可能的话,你需要完全重新考虑这个设计。

将文件添加到ZIP存档需要写入存档。但是,ZIP存档中存储的文件不可写 - 它们可以替换为新文件,但不会更新到位 - 因此无法直接将文件写入嵌套的ZIP存档。

您的代码无法正常工作,因为更新zfiledata中的ZIP存档不会更新父存档中的相应数据。 (毕竟,它只是一个BytesIO对象。)您需要将该数据写回父存档以保留更改。但是,正如我之前提到的,这将是一个缓慢且昂贵的操作 - 特别是如果存档很大 - 所以应该避免。