FAQ PythonConsultez toutes les FAQ

Nombre d'auteurs : 11, nombre de questions : 188, dernière mise à jour : 2 septembre 2018 

 
OuvrirSommaireGestion Fichier/RépertoireCompression/Archive

Pour manipuler les archives ZIP, il vous faudra passer par le module zipfile. Vous utiliserez 2 fonctions de ce module.
La première fonction zipfile.ZipFile( file[, mode[, compression[, allowZip64]]]) file est le nom du fichier de l'archive à créer, mode, le mode d'ouverture du fichier, donc ici 'w' (ou 'a' si l'archive existe déjà et que vous voulez la compléter), compression représente le mode de compression ZIP et aura pour valeur ZIP_STORED ou ZIP_DEFLATED.
La deuxième fonction est la méthode z.write( filename[, arcname[, compress_type]]) filename est le chemin du fichier à compresser, arcname le chemin d'accès du fichier lors de la décompression (par défaut identique à filename).
Il vous faudra également parcourir l'arborescence du répertoire afin d'ajouter chaque fichier dans l'archive.

Zip du répertoire c:/python25/
Sélectionnez

import zipfile
import os.path
import glob

def zipdirectory(filezip, pathzip):
    lenpathparent = len(pathzip)+1   ## utile si on veut stocker les chemins relatifs
    def _zipdirectory(zfile, path):
        for i in glob.glob(path+'\\*'):
            if os.path.isdir(i): _zipdirectory(zfile, i )
            else:
                print i
                zfile.write(i, i[lenpathparent:]) ## zfile.write(i) pour stocker les chemins complets
    zfile = zipfile.ZipFile(filezip,'w',compression=zipfile.ZIP_DEFLATED)
    _zipdirectory(zfile, pathzip)
    zfile.close()

zipdirectory('python25.zip', 'c:/python25')
Créé le 30 novembre 2006  par Guigui_

Lien : Comment lister l'arborescence d'un répertoire ?
Lien : Python Library Reference

Pour décompresser une archive ZIP, il suffit de parcourir l'ensemble des fichiers de l'archive donnée par z.namelist() et de copier chaque fichier de cette archive dans un nouveau fichier que l'on crée. zipfile.ZipFile(file, 'r') permet d'ouvrir une archive ZIP en mode lecture. La méthode z.read(name) permet de lire le contenu du fichier name de l'archive

 
Sélectionnez

import zipfile
import os.path
import os
import glob

def dezip(filezip, pathdst = ''):
    if pathdst == '': pathdst = os.getcwd()  ## on dezippe dans le repertoire locale
    zfile = zipfile.ZipFile(filezip, 'r')
    for i in zfile.namelist():  ## On parcourt l'ensemble des fichiers de l'archive
        print i
        if os.path.isdir(i):   ## S'il s'agit d'un repertoire, on se contente de creer le dossier
            try: os.makedirs(pathdst + os.sep + i)
            except: pass
        else:
            try: os.makedirs(pathdst + os.sep + os.path.dirname(i))
            except: pass
            data = zfile.read(i)                   ## lecture du fichier compresse
            fp = open(pathdst + os.sep + i, "wb")  ## creation en local du nouveau fichier
            fp.write(data)                         ## ajout des donnees du fichier compresse dans le fichier local
            fp.close()
    zfile.close()

dezip('python25.zip', 'python25')
Créé le 2 décembre 2006  par Guigui_
  

Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright © 2005-2009 Developpez Developpez LLC. Tous droits réservés Developpez LLC. Aucune reproduction, même partielle, ne peut être faite de ce site ni de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.