2017-07-27 2 views
0

J'essaie d'utiliser le code suivant pour décompresser tous les dossiers zip dans mon dossier racine; ce code a été trouvé sur ce fil:pourquoi zipfile essayant de décompresser les fichiers xlsx?

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])) 

mais je continue à obtenir cette erreur qui dit FileNotFoundError disant que le fichier XLSX n'existe pas:

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' 

Ma question est, pourquoi il veut de toute façon décompresser ce fichier Excel?!

Et comment puis-je me débarrasser de l'erreur?

J'ai aussi essayé d'utiliser au lieu de r u pour rootPath:

rootPath = r"//rootdir/myfolder" 

et je reçois la même erreur.

Toute aide est vraiment appréciée!

+0

Je crois que 'os.path.join (root, os.path.splitext (filename) [0])' est la raison. – direprobs

+0

que voulez-vous dire par là? mais cela fonctionne sur d'autres dossiers zip. il a décompressé environ 20 dossiers zip avec succès – alwaysaskingquestions

+0

L'erreur indique explicitement qu'il n'y a aucun tel fichier ou répertoire. En d'autres termes, il ne cherche pas à décompresser le fichier '.xlsx', mais plutôt à se plaindre qu'il n'y a pas de répertoire à décompresser. Même si vous avez réussi à décompresser certaines archives, cela ne garantit pas que 'os.path.join (root, os.path.splitext (filename) [0])' donnera un chemin valide pour décompresser l'archive tout le temps. – direprobs

Répondre

1

Certains noms de fichiers et de répertoires peuvent avoir points supplémentaires dans leur nom, en conséquence la dernière ligne, à la différence des noms de fichiers Windows peuvent avoir des points sur Unix:

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

cette ligne échoue. Pour voir comment cela se passe:

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

Avec ou sans points supplémentaires, les problèmes seront toujours lieu dans votre code:

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

Si aucun '/my/path.to/mydir/arch' peut être trouvé, FileNotFoundError ressusciteront. Je suggère que vous soyez explicite dans votre chemin, sinon vous devez vous assurer de l'existence de ces répertoires.

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

Extrait tous les membres de l'archive dans le répertoire de travail courant. path spécifie un répertoire différent pour extraire de ...

À moins path est un répertoire existant, FileNotFoundError ressusciteront.

+0

Salut Direprobs, merci beaucoup d'avoir essayé de nous aider! s'avère robyschek avait raison, il était dû à long nom de fichier :( – alwaysaskingquestions

+0

@alwaysaskingquestions Vous accueillir! – direprobs