2013-07-18 8 views
9

Próbuję wyodrębnić określony plik z archiwum zip przy użyciu Pythona.Wyodrębnij konkretny plik z archiwum zip bez zachowania struktury katalogów w pythonie

W takim przypadku wyodrębnij ikonę pliku APK z samego pliku APK.

Obecnie używam

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

który działa w moim katalogu skryptu to tworzenie temp/res/drawable/icon.png który jest temperatura plus sama ścieżka jako plik znajduje się wewnątrz apk.

To, czego naprawdę chcę, to skończyć z temp/icon.png.

Czy jest jakiś sposób zrobienia tego bezpośrednio za pomocą polecenia zip, czy muszę wyodrębnić, a następnie przenieść plik, a następnie ręcznie usunąć katalogi?

Odpowiedz

16

Można użyć 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])) 

Albo użyć 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

zarówno bardzo ładne odpowiedzi, znacznie bardziej wymowne niż po prostu przesuwając go jak ja. Drobna poprawka pasująca do zadanego pytania, jest z otwartym (os.path.join (tDir, os.path.basename (icon [1])), "wb") jako f: tak, że ikona wyjścia znajduje się w katalogu temp, nie cwd() gdzie jest skrypt. Dzięki – o0rebelious0o

Powiązane problemy