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

如何在不维护Python目录结构的情况下从zip中提取文件?

汝楷
2023-03-14
问题内容

我正在尝试使用python从zip存档中提取特定文件。

在这种情况下,请从apk本身中提取apk的图标。

我目前正在使用

with zipfile.ZipFile('/path/to/my_file.apk') as z:
    # extract /res/drawable/icon.png from apk to /temp/...
    z.extract('/res/drawable/icon.png', 'temp/')

哪个起作用,在我的脚本目录中创建的temp/res/drawable/icon.png是temp,加上与APK内部文件相同的路径。

我真正想要的是结束temp/icon.png

有什么方法可以直接使用zip命令直接执行此操作,还是我需要解压缩然后移动文件,然后手动删除目录?


问题答案:

您可以使用zipfile.ZipFile.open:

import shutil
import zipfile

with zipfile.ZipFile('/path/to/my_file.apk') as z:
    with z.open('/res/drawable/icon.png') as zf, open('temp/icon.png', 'wb') as f:
        shutil.copyfileobj(zf, f)

或使用zipfile.ZipFile.read:

import zipfile

with zipfile.ZipFile('/path/to/my_file.apk') as z:
    with open('temp/icon.png', 'wb') as f:
        f.write(z.read('/res/drawable/icon.png'))


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

  • 问题内容: 我正在处理备份脚本,并希望压缩文件目录: 这可以压缩它,但是当我解压生成的文件时,它包括完整的文件结构:这些文件位于中。 有没有一种方法可以排除父目录,从而使生成的tar只知道最后一个目录()? 问题答案:

  • 问题内容: 我尝试从.zip提取包含一个文件夹中的子文件夹的所有文件。我希望子文件夹中的所有文件都仅提取到一个文件夹中而不保留原始结构。此刻,我提取所有内容,将文件移动到文件夹,然后删除以前的子文件夹。具有相同名称的文件将被覆盖。 在写入文件之前可以这样做吗? 例如,这是一个结构: 最后,我希望: 我可以在此代码中添加什么? 如果我从zip_file.namelist()重命名文件路径,则会出现此

  • 问题内容: 我有一个可压缩文件()的Python脚本: 当我这样做时,我得到了zip文件。但是,当我尝试解压缩文件时,我在对应于文件路径的一系列目录中获取了文本文件,即,我在目录中看到一个名为的文件夹,并且其中包含更多目录,即 当我解压缩时,我的目录结构看起来像 有没有一种方法可以使我解压缩,而只能得到? 换句话说,当我解压缩时,它看起来应该像 问题答案: 该方法采用一个可选参数,该参数指定zip

  • 问题内容: 如何从命令外壳中获得与.zip文件(而不是gzip)的等价形式,而无需将其解压缩?也就是说,如何列出.zip压缩文件中压缩的不同文件? 问题答案: Perreal的答案是正确的,但我建议安装工具(在发行版的软件包管理器中查找)。然后,对于任何类型的存档文件,bzip2,gzip,tar …,您只需记住一个命令:

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