FAQ Python

FAQ PythonConsultez toutes les FAQ
Nombre d'auteurs : 11, nombre de questions : 188, dernière mise à jour : 14 juin 2021
Sommaire→Gestion Fichier/Répertoire→Compression/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]]]) où 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]]) où 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.
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')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
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')


