我有一个zip文件,其中包含三个zip文件,如下所示:
zipfile.zip\
dirA.zip\
a
dirB.zip\
b
dirC.zip\
c
我要提取zip文件中包含这些名称的目录(dirA、dirB、dirC)中的所有内部zip文件。
基本上,我想以下面的模式结束:
output\
dirA\
a
dirB\
b
dirC\
c
我试过以下方法:
import os, re
from zipfile import ZipFile
os.makedirs(directory) # where directory is "\output"
with ZipFile(self.archive_name, "r") as archive:
for id, files in data.items():
if files:
print("Creating", id)
dirpath = os.path.join(directory, id)
os.mkdir(dirpath)
for file in files:
match = pattern.match(filename)
new = match.group(2)
new_filename = os.path.join(dirpath, new)
content = archive.open(file).read()
with open(new_filename, "wb") as outfile:
outfile.write(content)
但它只提取zip文件,最后我得到了:
output\
dirA\
dirA.zip
dirB\
dirB.zip
dirC\
dirC.zip
任何建议,包括代码段都会非常感谢,因为我尝试了很多不同的东西,但都没有成功地阅读文档。
我尝试了其他一些解决方案,但无法让它们“到位”。我将发布我的解决方案来处理“就地”版本。注意:它会删除zip文件,并用同名目录“替换”它们,因此如果要保留,请备份zip文件。
策略很简单。解压目录(和子目录)中的所有zip文件,并清洗和重复,直到没有zip文件保留。如果zip文件包含zip文件,则需要进行冲洗和重复操作。
假设您的zip文件已经备份,那么您可以通过调用
unzip_directory_recursively(your_directory)
来实现这一切。对于提取嵌套zip文件(任何嵌套级别)并清理原始zip文件的函数:
提取zip文件时,您需要将内部zip文件写入内存,而不是磁盘上的文件。为此,我使用了^{} 。
查看此代码:
如果以
zipfile.zip
的形式运行extract("zipfile.zip")
:输出应为:
相关问题 更多 >
编程相关推荐