2013-10-20 4 views
8

Ich versuche, gezippte Ordner mit dem hier gefundenen Code zu extrahieren.Python zipfile.extract() extrahiert nicht alle Dateien

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) 

Aber wenn man versucht, zum Beispiel zu extrahieren, wordpress.zip mit Verzeichnisstruktur
Wordpress/
-wp-content/
--- somefile.php
-wp-config.php
-index.php
Ich bekomme nur die Dateien im Ordner unter Stammordner oder Wordpress/in diesem Fall. Also bekomme ich wordpress/wp-content/somefile.php, aber nicht die Dateien im WordPress/Ordner selbst.

Antwort

14

Der erste Blick ist the documentation:

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

, dass auf Ihre Situation anwenden, ich würde versuchen:

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

Dies funktioniert, aber ich verliere Schutzweg Traversal. Vielen Dank. –

+1

Es scheint, als ob der Schutz in 2.7.4 und höher existiert. –

Verwandte Themen