54 votes

Extraction du contenu du fichier zip dans un répertoire spécifique dans Python 2.7

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 vers 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()

113voto

secretmike Points 4517

Je pense que vous venez d'avoir 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 juste 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

12voto

fiatjaf Points 954

J'ai essayé les autres réponses de ce fil, mais la solution finale pour moi était simplement:

 zfile = zipfile.ZipFile('filename.zip')
zfile.extractall(optional_target_folder)

Regardez extractall , mais utilisez-le uniquement avec des fichiers zip dignes de confiance.

5voto

Slakker Points 153

Ajout à la réponse de secretmike ci-dessus avec prise en charge 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:\\")

4voto

Peter Gibson Points 5376

Si vous souhaitez simplement extraire un fichier zip de la ligne de commande à l'aide de Python (par exemple parce que vous n'avez pas la commande unzip disponible), vous pouvez appeler directement le module zipfile

 python -m zipfile -e monty.zip target-dir/

Jetez un œil à la doc . Il prend également en charge la compression et la liste du contenu.

2voto

razzmataz Points 389

Peter de Rivaz a raison dans le commentaire ci-dessus. Vous allez vouloir avoir le répertoire dans l'appel à open(). Vous allez vouloir faire quelque chose comme ceci :

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X