2017-07-27 4 views
0

Ich versuche, den folgenden Code zu verwenden, um alle Zip-Ordner in meinem Stammordner zu entpacken;Warum zipfile versuchen, xlsx-Dateien zu entpacken?

Unzip zip files in folders and subfolders with python

rootPath = u"//rootdir/myfolder" # CHOOSE ROOT FOLDER HERE 
pattern = '*.zip' 
for root, dirs, files in os.walk(rootPath): 
    for filename in fnmatch.filter(files, pattern): 
     print(os.path.join(root, filename)) 
     zipfile.ZipFile(os.path.join(root, filename)).extractall(os.path.join(root, os.path.splitext(filename)[0])) 

aber ich halte immer diese Fehlermeldung, die besagt, FileNotFoundError die xlsx Datei nicht existiert sagen: Dieser Code wurde auf diesen Thread gefunden ist

Traceback (most recent call last): 
    File "//rootdir/myfolder/Python code/unzip_helper.py", line 29, in <module> 
    zipfile.ZipFile(os.path.join(root, filename)).extractall(os.path.join(root, os.path.splitext(filename)[0])) 
    File "//rootdir/myfolder/Python\Python36-32\lib\zipfile.py", line 1491, in extractall 
    self.extract(zipinfo, path, pwd) 
    File "//myaccount/Local\Programs\Python\Python36-32\lib\zipfile.py", line 1479, in extract 
    return self._extract_member(member, path, pwd) 
    File "//myaccount/Local\Programs\Python\Python36-32\lib\zipfile.py", line 1542, in _extract_member 
    open(targetpath, "wb") as target: 

FileNotFoundError: [Errno 2] No such file or directory: '\\rootdir\myfolder\._SGS Naked 3 01 WS Kappa Coated and a very long very long file name could this be a problem i dont think so.xlsx' 

Meine Frage, warum sollte Willst du diese Excel-Datei trotzdem entpacken ?!

Und wie kann ich den Fehler loswerden?

Ich habe auch an Stelle von u mit r versucht, für ROOTPATH:

rootPath = r"//rootdir/myfolder" 

und ich den gleichen Fehler.

Jede Hilfe wird wirklich geschätzt!

+0

Ich glaube 'os.path.join (root, os.path.splitext (Dateiname) [0])' ist der Grund. – direprobs

+0

was meinst du damit? aber es funktioniert auf anderen Zip-Ordnern. Es entpackte etwa 20 Zip-Ordner erfolgreich – alwaysaskingquestions

+0

Der Fehler besagt explizit, dass es keine solche Datei oder Verzeichnis gibt. Mit anderen Worten, es wird nicht versucht, die Datei ".xlsx" zu entpacken, sondern sich zu beschweren, dass es kein Verzeichnis zum Entpacken gibt. Selbst wenn Sie einige Archive erfolgreich entpackt haben, wird dies nicht garantieren, dass der 'os.path.join (root, os.path.splitext (filename) [0])' einen gültigen Pfad zum Entpacken des Archivs gibt. – direprobs

Antwort

1

Einige Dateinamen und Verzeichnisnamen können zusätzliche Punkte in ihrem Namen haben, als Folge die letzte Zeile, im Gegensatz zu Windows-Dateinamen Punkte auf Unix hat:

zipfile.ZipFile(os.path.join(root, filename)).extractall(os.path.join(root, os.path.splitext(filename)[0])) 

diese Linie versagt. Um zu sehen, wie das geschieht:

>>> filename = "my.arch.zip" 
>>> root = "/my/path/to/mydir/" 
>>> os.path.join(root, os.path.splitext(filename)[0]) 
'/my/path/to/mydir/my.arch' 

Mit oder ohne zusätzliche Punkte, Probleme nehmen nach wie vor in Ihrem Code:

>>> os.path.join(root, os.path.splitext(filename)[0]) 
'/my/path.to/mydir/arch' 

Wenn kein '/my/path.to/mydir/arch' gefunden werden kann, wird FileNotFoundError angehoben werden. Ich schlage vor, dass Sie explizit in Ihrem Pfad sind, andernfalls müssen Sie die Existenz dieser Verzeichnisse sicherstellen.

ZipFile.extractall(path=None, members=None, pwd=None)

Extract alle Mitglieder aus dem Archiv in dem aktuellen Arbeitsverzeichnis. path legt ein anderes Verzeichnis ...

zu extrahieren Sofern path ein vorhandenes Verzeichnis, wird FileNotFoundError angehoben werden.

+0

Hallo Direprobs, vielen Dank für deine Hilfe! stellt sich heraus, robyschek hatte Recht, es war wegen langen Dateinamen :( – alwaysaskingquestions

+0

@alwaysaskingquestions Sie begrüßen! – direprobs