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

如何在Python中不维护目录结构的情况下从zip中提取文件?,python,zip,unzip,directory-structure,Python,Zip,Unzip,Directory Structure,我正在尝试使用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/ic

我正在尝试使用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命令执行此操作,或者我需要先提取文件,然后移动文件,然后手动删除目录?

您可以使用:

或使用:


这两个答案都很好,比像我一样移动它更有说服力。为适应所提出的问题,对open(os.path.join(tDir,os.path.basename(图标[1]),“wb”)进行了较小的修改,将其作为f:以便输出图标位于临时目录中,而不是脚本所在的cwd()。感谢您值得注意的是,
extract
extract\u all
的CPython实现使用了“
zipfile.zipfile.open
”版本:例如,欢迎您@false。我尝试了您的实现,发现了一些问题,我意识到这是缺少导入。除此之外,它还可以像时钟一样工作。请注意,在将文件写入磁盘之前,使用
zipfile.zipfile.read
将在内存中加载完整的文件。
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)
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'))