1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97
| #!/usr/bin/env python3
# -*- coding: utf-8 -*-
import zipfile
"""
Informations générales sur l'archivage zip, voir:
https://pkware.cachefly.net/webdocs/casestudies/APPNOTE.TXT
#compress_type = {0:"ZIP_STORED", 8:"ZIP_DEFLATED", 12:"ZIP_BZIP2", 14:"ZIP_LZMA"}
"""
#############################################################################
def listezip(fichierzip):
"""affiche la liste des fichiers de l'archive. Signale les adresses absolues
"""
if zipfile.is_zipfile(fichierzip):
try:
with zipfile.ZipFile(fichierzip) as fzip:
for fichier in fzip.namelist():
if fichier[0] in "\\/" or fichier[1]==":":
print("Danger: chemin absolu =>", fichier)
else:
print(fichier)
except Exception as msgerr:
print("Erreur =>", msgerr)
else:
print("Ce fichier", fichierzip, "n'est pas une archive valide" )
#############################################################################
def infozip(fichierzip):
"""Donne des informations sur les fichiers de l'archive "fichierzip"
"""
compress_type = {0:"ZIP_STORED", 8:"ZIP_DEFLATED", 12:"ZIP_BZIP2", 14:"ZIP_LZMA"}
if zipfile.is_zipfile(fichierzip):
with zipfile.ZipFile(fichierzip) as fzip:
for fichier in fzip.namelist():
print("="*79)
info = fzip.getinfo(fichier)
print(info.filename)
print()
print("date_time:", info.date_time)
print("compress_type:", compress_type[info.compress_type])
print("comment:", info.comment)
print("extra:", info.extra)
print("create_system:", info.create_system)
print("create_version:", info.create_version)
print("extract_version:", info.extract_version)
print("reserved:", info.reserved)
print("flag_bits:", info.flag_bits)
print("volume:", info.volume)
print("internal_attr:", info.internal_attr)
print("info.external_attr:", info.external_attr)
print("header_offset:", info.header_offset)
print("CRC:", info.CRC)
print("compress_size:", info.compress_size)
print()
else:
print("Ce fichier", fichierzip, "n'est pas une archive valide" )
#############################################################################
def extraitzip(fichierzip, repdest, motdepasse=None):
"""Extrait l'archive zip dans le répertoire destination repdest
Suppose que les chemins de l'archive sont relatifs (important:
danger s'ils sont absolus et si origine de l'archive non sûre)
"""
if zipfile.is_zipfile(fichierzip):
with zipfile.ZipFile(fichierzip, "r") as fzip:
for fichier in fzip.namelist():
try:
fzip.extract(fichier, repdest, motdepasse)
print("Extraction de", fichier)
except Exception as msgerr:
print("Erreur =>", msgerr)
else:
print("Ce fichier", fichierzip, "n'est pas une archive valide" )
#############################################################################
if __name__ == "__main__":
fichierzip = "courrier.zip"
# liste les fichiers de l'archive
listezip(fichierzip)
print("*"*79)
print()
# liste les fichiers de l'archive avec leurs propriétés
infozip(fichierzip)
print("*"*79)
print()
# extraction
repdest = r"C:\chemin_vers\temp"
extraitzip(fichierzip, repdest) |
Partager