当前位置: 首页 > 面试题库 >

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

向实
2023-03-14
问题内容

我尝试从.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 2.7.1(在Windows上,fyi)从zip文件中提取文件,而我的每一次尝试都显示了具有Modified Date =提取时间的提取文件(不正确)。 我也尝试使用.extractall方法,结果相同。 谁能告诉我我在做什么错? 我想认为这是可能的,而不必重新校正每个[Windows文件的文件创建日期?](http://codingdict.com/que

  • 我有一个要求,我需要下载某些。从FTP服务器压缩文件,并将存档的内容(内容是一些XML文件)推送到HDFS(Hadoop分布式文件系统)。因此,到目前为止,我正在使用acpache FTPClient连接到FTP服务器,并首先将文件下载到本地计算机。稍后将其解压缩,并给出一个方法的文件夹路径,该方法将迭代本地文件夹并将文件推送到HDFS。为了便于理解,我还在下面附加了一些代码片段。 现在,这种方法

  • 问题内容: 我正在使用java.util.Zip和java.util.ZipEntry成功将zip文件的内容添加到磁盘。我想在* nix文件系统上解压缩时保持文件权限集。 谁能指出我这样做的“正确”方法? 问题答案: 本质上,您不能在Zip /Jar文件中存储(unix)文件权限,因此您在提取jar时不能保留它们(它们在创建jar时就丢​​失了)。看到这个问题:创建一个jar文件-保留文件权限 如

  • 问题内容: 我正在尝试使用python从zip存档中提取特定文件。 在这种情况下,请从apk本身中提取apk的图标。 我目前正在使用 哪个起作用,在我的脚本目录中创建的是temp,加上与APK内部文件相同的路径。 我真正想要的是结束。 有什么方法可以直接使用zip命令直接执行此操作,还是我需要解压缩然后移动文件,然后手动删除目录? 问题答案: 您可以使用zipfile.ZipFile.open:

  • 我试图使用python从zip存档中提取特定的文件。 在这种情况下,从apk本身提取apk的图标。 我目前正在使用 这确实工作,在我的脚本目录中,它正在创建,这是temp加上文件在apk中的相同路径。 我真正想要的是以。 有没有办法直接用zip命令来实现这一点,或者我需要提取文件,然后移动文件,然后手动删除目录?

  • 问题内容: 我正在尝试使用密码保护解压缩zip文件。我知道有一个名为“ zip4j”的Java库可以为我提供帮助。但是我无法打开zip4j网站来查看教程。 我已经用另一个镜像下载了zip4j库,但是我不知道如何使用它。有没有人可以粘贴使用zip4j解压缩密码保护zip文件的示例代码? zip4j网站 非常感谢! 问题答案: 请尝试以下操作,并确保您使用的是最新的Zip4j库(1.3.1):