FAQ Python
FAQ PythonConsultez toutes les FAQ
Nombre d'auteurs : 11, nombre de questions : 188, dernière mise à jour : 14 juin 2021
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'
)