J'ai lu la zipfiledocumentation , mais je ne comprenais pas comment décompresser un fichier, seulement comment compresser un fichier. Comment décompresser tout le contenu d'un fichier zip dans le même répertoire?
que faire si le contenu de l'archive .zip est le même, dans toutes les archives .zip? comment renommer le contenu avant de l'extraire? exemple: 1.zip 2.zip .. contiennent tous content.txt: extraire tout comme 1content.txt 2content.txt?
iratzhash
8
@iratzhash Je crée généralement un nouveau répertoire temporaire pour le contenu en utilisant tempfile: docs.python.org/3/library/tempfile.html Je décompresse le répertoire temporaire et je déplace / organise les fichiers à partir de là.
Dave Forgac
8
@ 3kstc je le ferais from zipfile import ZipFile. Lorsque vous l'utilisez, vous n'avez plus besoin d'utiliser zipfile.ZipFileet pouvez utiliser ZipFile(zip_file_name).
Debug255
@iratzhash Je me rends compte que vous avez commenté il y a 1,5 ans. Mais pour que les autres le sachent, le contenu d'un fichier zip est généralement en lecture seule. Une bonne réponse est ici par "bouke"
Debug255
Une sorte de méta-note, mais l'édition de novembre 2018 la rend à peu près identique à une autre réponse qui utilisait déjà le gestionnaire de contexte (et des liens vers ce que cela signifie).
Engineero
304
Si vous utilisez Python 3.2 ou version ultérieure:
Merci de votre attention @MylesHollowed Cependant, ce n'est pas une copie de la réponse acceptée. Je suis d'accord qu'ils sont similaires les uns aux autres, mais ils sont différents. Cela est également indiqué par votre commentaire, car celui qui est accepté est certainement meilleur pour vous que le mien. S'il s'agissait d'une copie, ce serait la même chose ... Pour quelqu'un ma réponse peut être utile car elle est peut-être plus lisible et comme vous l'avez remarqué importer moins de code ... C'est à cause de ces différences que j'ai décidé de mettre ma réponse pour donner une alternative. N'est-ce pas pourquoi nous pouvons mettre d'autres réponses après en avoir accepté une? Tout le meilleur
simhumileco
Quel est le problème avec cette réponse? Pourquoi quelqu'un lui a-t-il donné un point négatif? Après tout, c'est la réponse à la question et se distingue par sa simplicité par rapport aux autres réponses, ce qui peut être important pour certaines personnes qui recherchent une réponse. N'est-ce pas?
simhumileco
1
@MylesHollowed import zipfile.ZipFilegénère ModuleNotFoundError: No module named 'zipfile.ZipFile'; 'zipfile' is not a packageen 3.6.5. Je suis ouvert à ce que ce soit une erreur d'opérateur de ma part, mais je ne sais pas ce que c'est.
MikeF
6
essaye ça :
import zipfile
def un_zipFiles(path):
files=os.listdir(path)for file in files:if file.endswith('.zip'):
filePath=path+'/'+file
zip_file = zipfile.ZipFile(filePath)for names in zip_file.namelist():
zip_file.extract(names,path)
zip_file.close()
import os
zip_file_path ="C:\AA\BB"
file_list = os.listdir(path)
abs_path =[]for a in file_list:
x = zip_file_path+'\\'+a
print x
abs_path.append(x)for f in abs_path:
zip=zipfile.ZipFile(f)
zip.extractall(zip_file_path)
Cela ne contient pas de validation pour le fichier s'il n'est pas compressé. Si le dossier contient un fichier non .zip, il échouera.
Réponses:
C'est à peu près ça!
la source
from zipfile import ZipFile
. Lorsque vous l'utilisez, vous n'avez plus besoin d'utiliserzipfile.ZipFile
et pouvez utiliserZipFile(zip_file_name)
.Si vous utilisez Python 3.2 ou version ultérieure:
Vous n'avez pas besoin d'utiliser close ou try / catch avec cela car il utilise la construction du gestionnaire de contexte .
la source
zipfile
+pathlib
= gagner. ça vous dérange si je mets légèrement à jour votre réponse?Utilisez la
extractall
méthode, si vous utilisez Python 2.6+la source
Vous pouvez également importer uniquement
ZipFile
:Fonctionne en Python 2 et Python 3 .
la source
import zipfile.ZipFile
génèreModuleNotFoundError: No module named 'zipfile.ZipFile'; 'zipfile' is not a package
en 3.6.5. Je suis ouvert à ce que ce soit une erreur d'opérateur de ma part, mais je ne sais pas ce que c'est.essaye ça :
path: décompressez le chemin du fichier
la source
Cela ne contient pas de validation pour le fichier s'il n'est pas compressé. Si le dossier contient un fichier non .zip, il échouera.
la source