微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决从zip中提取文件,而不使用python ZipFile保留结构?

这将打开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)

解决方法

我尝试从.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"

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。