2013-07-18 4 views
9

Ich versuche, eine bestimmte Datei aus einem Zip-Archiv mit Python zu extrahieren.Entpacken Sie eine bestimmte Datei aus einem Zip-Archiv, ohne Verzeichnisstruktur in Python zu pflegen

In diesem Fall extrahieren Sie ein apk-Symbol aus der apk selbst.

Ich bin derzeit mit

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/... 

die Arbeit der Fall ist, in meinem Skript-Verzeichnis ist es temp/res/drawable/icon.png schaffen, die Temperatur und den gleichen Weg wie die Datei innerhalb des apk ist.

Was ich eigentlich will, ist am Ende mit temp/icon.png.

Gibt es eine Möglichkeit, dies direkt mit einem Zip-Befehl zu tun, oder muss ich extrahieren, dann die Datei verschieben und dann die Verzeichnisse manuell entfernen?

Antwort

16

können Sie zipfile.ZipFile.read verwenden:

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])) 

Oder zipfile.ZipFile.open verwenden:

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) 
+0

beide sehr nett Antworten, weit beredter als es nur zu bewegen, wie ich war. Eine kleine Korrektur, um die Frage zu stellen, ist mit open (os.path.join (tDir, os.path.basename (icon [1])), 'wb') als f: so dass das Ausgabesymbol im temporären Verzeichnis ist, nicht cwd() wo Skript ist. Vielen Dank – o0rebelious0o

Verwandte Themen