我有一个zip文件,其中包含三个zip文件,如下所示:
zipfile.zip\
dirA.zip\
a
dirB.zip\
b
dirC.zip\
c
我想在具有这些名称(dirA、dirB、dirC)的目录中提取zip文件中的所有内部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")
:输出应为:
相关问题 更多 >
编程相关推荐