gpt4 book ai didi

python - 使用python ZipFile从zip中提取文件而不保留结构?

转载 作者:IT老高 更新时间:2023-10-28 21:39:31 25 4
gpt4 key购买 nike

我尝试从一个文件夹中包含子文件夹的 .zip 中提取所有文件。我希望子文件夹中的所有文件仅提取到一个文件夹中,而不保留原始结构。目前,我提取所有文件,将文件移动到一个文件夹,然后删除以前的子文件夹。同名文件会被覆盖。

可以在写文件之前做吗?

这是一个结构示例:

my_zip/file1.txt
my_zip/dir1/file2.txt
my_zip/dir1/dir2/file3.txt
my_zip/dir3/file4.txt

最后我希望:

my_dir/file1.txt
my_dir/file2.txt
my_dir/file3.txt
my_dir/file4.txt

我可以在这段代码中添加什么?

import zipfile
my_dir = "D:\\Download\\"
my_zip = "D:\\Download\\my_file.zip"

zip_file = zipfile.ZipFile(my_zip, 'r')
for files in zip_file.namelist():
zip_file.extract(files, my_dir)
zip_file.close()

如果我从 zip_file.namelist() 重命名文件路径,则会出现以下错误:

KeyError: "There is no item named 'file2.txt' in the archive"

最佳答案

这会打开 zip 存档成员的文件句柄,提取文件名并将其复制到目标文件(这就是 ZipFile.extract 的工作方式,无需处理子目录)。

import os
import shutil
import zipfile

my_dir = r"D:\Download"
my_zip = r"D:\Download\my_file.zip"

with zipfile.ZipFile(my_zip) as zip_file:
for member in zip_file.namelist():
filename = os.path.basename(member)
# skip directories
if not filename:
continue

# copy file (taken from zipfile's extract)
source = zip_file.open(member)
target = open(os.path.join(my_dir, filename), "wb")
with source, target:
shutil.copyfileobj(source, target)

关于python - 使用python ZipFile从zip中提取文件而不保留结构?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4917284/

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