gpt4 book ai didi

python - 如何递归提取zip文件?

转载 作者:太空狗 更新时间:2023-10-29 17:45:17 24 4
gpt4 key购买 nike

我有一个 zip 文件,其中包含三个 zip 文件,如下所示:

zipfile.zip\  
dirA.zip\
a
dirB.zip\
b
dirC.zip\
c

我想将 zip 文件中的所有内部 zip 文件提取到具有这些名称(dirA、dirB、dirC)的目录中。
基本上,我想以以下架构结束:

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 文件写入内存而不是将它们写入磁盘。为此,我使用了 BytesIO .

检查这段代码:

import os
import io
import zipfile

def extract(filename):
z = zipfile.ZipFile(filename)
for f in z.namelist():
# get directory name from file
dirname = os.path.splitext(f)[0]
# create new directory
os.mkdir(dirname)
# read inner zip file into bytes buffer
content = io.BytesIO(z.read(f))
zip_file = zipfile.ZipFile(content)
for i in zip_file.namelist():
zip_file.extract(i, dirname)

如果您使用 zipfile.zip 运行 extract("zipfile.zip") 作为:

zipfile.zip/
dirA.zip/
a
dirB.zip/
b
dirC.zip/
c

输出应该是:

dirA/
a
dirB/
b
dirC/
c

关于python - 如何递归提取zip文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36285502/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com