C'est le code que j'utilise actuellement pour extraire un fichier Zip qui réside dans le même répertoire de travail actuel que le script. Comment puis-je spécifier un répertoire différent dans lequel extraire?
Le code que j'ai essayé ne l'extrait pas où je veux.
import zipfile
fh = open('test.Zip', 'rb')
z = zipfile.ZipFile(fh)
for name in z.namelist():
outfile = open(name, 'wb')
outfile.write('C:\\'+z.read(name))
outfile.close()
fh.close()
Je pense que vous avez juste une confusion ici. Devrait probablement être quelque chose comme ce qui suit:
import zipfile
fh = open('test.Zip', 'rb')
z = zipfile.ZipFile(fh)
for name in z.namelist():
outpath = "C:\\"
z.extract(name, outpath)
fh.close()
et si vous voulez seulement extraire tous les fichiers:
import zipfile
with zipfile.ZipFile('test.Zip', "r") as z:
z.extractall("C:\\")
Utilisez pip install zipfile36 pour les versions récentes de Python
import zipfile36
J'ai essayé les autres réponses dans ce fil, mais la solution finale pour moi était simplement:
zfile = zipfile.ZipFile('filename.Zip')
zfile.extractall(optional_target_folder)
Regardez extractible , mais utilisez-le uniquement avec des fichiers Zip dignes de confiance.
Ajout de la réponse de secretmike ci-dessus avec le support de python 2.6 pour extraire tous les fichiers.
import zipfile
import contextlib
with contextlib.closing(zipfile.ZipFile('test.Zip', "r")) as z:
z.extractall("C:\\")
Si vous souhaitez simplement extraire un fichier Zip de la ligne de commande en utilisant Python (par exemple, car vous n'avez pas la commande unzip disponible), vous pouvez appeler le module zipfile directement.
python -m zipfile -e monty.Zip target-dir/
Jetez un coup d'œil au docs . Il prend également en charge la compression et la liste du contenu.
Peter de Rivaz a un point dans le commentaire ci-dessus. Vous allez vouloir avoir le répertoire dans l'appel à open (). Vous allez vouloir faire quelque chose comme ça:
import zipfile
import os
os.mkdir('outdir')
fh = open('test.Zip','rb')
z = zipfile.ZipFile(fh)
for name in z.namelist():
outfile = open('outdir'+'/'+name, 'wb')
outfile.write()
outfile.close()
fh.close()
J'ai modifié le code pour demander à l'utilisateur de saisir le nom du fichier et son chemin d'accès où il doit être extrait, etc. l'utilisateur aura plus de contrôle sur l'endroit où placer le dossier extrait et sur le nom à attribuer au dossier extrait.
import zipfile
#picking Zip file from the directory
ZipFileName = raw_input("Enter full path to Zip file:")
fh = open( ZipFileName , 'rb')
z = zipfile.ZipFile(fh)
#assigning a name to the extracted Zip folder
DestZipFolderName = raw_input("Assign destination folder a name: ")
DestPathName = raw_input("Enter destination directory: ")
DestPath = DestPathName + "\\" + DestZipFolderName
for name in z.namelist():
outpath = DestPath
z.extract(name, outpath)
fh.close()