2013-07-18 9 views
9

Sto provando ad estrarre un file specifico da un archivio zip usando python.Estrarre un file specifico da un archivio zip senza mantenere la struttura delle directory in python

In questo caso, estrarre un'icona apk dall'apk stesso.

Attualmente sto usando

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

che fa il lavoro, nella mia directory di script è la creazione di temp/res/drawable/icon.png che è temporanea, più lo stesso percorso del file è all'interno del apk.

Quello che voglio veramente è finire con temp/icon.png.

C'è un modo per farlo direttamente con un comando zip, o devo estrarre, quindi spostare il file, quindi rimuovere manualmente le directory?

risposta

16

È possibile utilizzare 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])) 

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

Entrambe le risposte molto bello, molto più eloquente di un semplice movimento è come se fossi. Correzione minore per adattarsi alla domanda, è con open (os.path.join (tDir, os.path.basename (icona [1])), 'wb') come f: in modo che l'icona di output si trovi nella directory temp, non cwd() dove lo script è. Grazie – o0rebelious0o

Problemi correlati