banniere.png

Exercice 06 - ajout d'un fichier dans une archive Zip

#!/usr/bin/python
# -*- coding: ISO-8859-15 -*-
import sys
import os
from zipfile import ZipFile?, is_zipfile

def ajoute_fichier(fichier_zip, fichier):
    """ ajoute un fichier dans une archive zip """
    curseur = ZipFile?(fichier_zip, mode="a")
    try:
        nom_archive = os.path.basename(fichier)
        if nom_archive not in curseur.namelist():
            curseur.write(fichier, nom_archive)
            return True
        else:
            return False
    finally:
        curseur.close()

def affiche_contenu(fichier_zip):
    """ affiche le contenu d'un fichier zip """
    curseur = ZipFile?(fichier_zip)
    try:
        # récupération du nb de fichiers
        nb_fichiers = len(curseur.infolist())
        # affichage
        print 'contenu de %s:\n' % fichier_zip
        curseur.printdir()
        print '%d fichier(s)' % nb_fichiers
    finally:
        curseur.close()

if __name__ == '__main__':
    """ deux utilisations possibles:

        o si seule l'archive est fournie en argument,
        la liste des fichiers contenus est affichée

        o si un fichier est aussi fourni, il est inséré dans l'archive
        si l'archive ne possède pas déjà un fichier sous ce nom puis
        affiche la liste des fichiers
    """
    if len(sys.argv) < 2:
        print ('utilisation: python %s nom de l\'archive [nom du fichier]?'
            'texte à remplacer texte de remplacement') % sys.argv[0]?
    else:
        fichier_zip = sys.argv[1]?
        if not is_zipfile(fichier_zip):
            print '"%s" n\'est pas un fichier zip' % fichier_zip
        else:
            if len(sys.argv) > 2:
                if not ajoute_fichier(fichier_zip, sys.argv[2]?):
                    print 'fichier avec le même nom déjà existant'
                else:
                    print 'fichier ajouté'
            else:
                affiche_contenu(fichier_zip)

Tarek Ziadé. Copyright 2006. Tous droits réservés. Licence contenu site