2013-10-20 7 views
8

ここにあるコードを使用してzipフォルダを抽出しようとしています。Pythonのzipfile.extract()ですべてのファイルが展開されない

def unzip(source_filename, dest_dir): 
with zipfile.ZipFile(source_filename) as zf: 

    for member in zf.infolist(): 
     words = member.filename.split('/') 
     path = dest_dir 
     for word in words[:-1]: 
      drive, word = os.path.splitdrive(word) 
      head, word = os.path.split(word) 
      if word in (os.curdir, os.pardir, ''): continue 
      path = os.path.join(path, word) 
     zf.extract(member, path) 

しかし、抽出しようとすると、例えば、ディレクトリ構造を持つwordpress.zip
ワードプレス/
-wp-コンテンツ/
--- somefile.php
-wp-config.phpを
-index.php
この場合、ルートフォルダまたはwordpress /の下のフォルダにあるファイルのみを取得します。だから、私はwordpress/wp-content/somefile.phpを取得しますが、wordpress /フォルダ自体のファイルは取得しません。

答えて

14

見て最初の場所はthe documentationです:

def unzip(source_filename, dest_dir): 
    with zipfile.ZipFile(source_filename) as zf: 
     zf.extractall(dest_dir) 
+0

これは動作しますが、私はパストラバーサルの保護を失う:あなたの状況にそれを適用する

ZipFile.extractall([path[, members[, pwd]]]) 

は、私が試してみました。ありがとう。 –

+1

保護が2.7.4以降にあるように見えます。 –

関連する問題