2013-07-18 11 views
9

pythonを使用してzipアーカイブから特定のファイルを抽出しようとしています。Pythonでディレクトリ構造を維持せずにzipアーカイブから特定のファイルを抽出します。

この場合、apkのアイコンをapkから抽出します。

私は現在、私のスクリプトディレクトリに、一時プラスファイルはAPKの内側にあるものと同じパスであるtemp/res/drawable/icon.pngを作成しています、仕事をし

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

を使用しています。

私が実際に望むのは、temp/icon.pngで終わることです。

これをzipコマンドで直接実行する方法はありますか、それともファイルを移動してから手動でディレクトリを削除する必要がありますか?

答えて

16

あなたは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])) 

または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

どちらも非常に素晴らしい答えを、私はだったようにそれを移動するよりもはるかに多くの雄弁。質問に合った軽微な修正は、出力アイコンが一時ディレクトリにあるように、開いて(os.path.join(tDir、os.path.basename(icon [1]))、 'wb'スクリプトがどこにあるのかcwd()ではありません。ありがとう – o0rebelious0o

関連する問題