Extract a specific file from a zip archive without

2019-02-08 04:29发布

I'm trying to extract a specific file from a zip archive using python.

In this case, extract an apk's icon from the apk itself.

I am currently using

ziphandle = open(tDir + mainapk[0],'rb') #`pwd`/temp/x.apk
zip = zipfile.ZipFile(ziphandle)
zip.extract(icon[1], tDir) # extract /res/drawable/icon.png from apk to `pwd`/temp/...

which does work, in my script directory it's creating temp/res/drawable/icon.png which is temp plus the same path as the file is inside the apk.

What I actually want is to end up with temp/icon.png.

Is there any way of doing this directly with a zip command, or do I need to extract, then move the file, then remove the directories manually?

1条回答
Deceive 欺骗
2楼-- · 2019-02-08 05:13

You can use zipfile.ZipFile.read:

import os

with zipfile.ZipFile(tDir + mainapk[0]) as z:
    with open(os.path.join(tDir, os.path.basename(icon[1])), 'wb') as f:
        f.write(z.read(icon[1]))

Or use zipfile.ZipFile.open:

import os
import shutil
with zipfile.ZipFile(tDir + mainapk[0]) as z:
    with z.open(icon[1]) as zf, open(os.path.join(tDir, os.path.basename(icon[1])), 'wb') as f:
        shutil.copyfileobj(zf, f)
查看更多
登录 后发表回答