Python : compresser facilement

Dernièrement j'ai voulu créer un système simple de sauvegarder à base de compressions. Pourquoi encore un système de ce type alors qu'il en existe plein ? Je suis sûr de pouvoir m'interfacer dessus avec Python, je voulais pouvoir l'intégrer dans mes projets. Je ne vais pas forcément vous donner le code de cet outil car il ne vous servirait pas. Je vais plutôt vous donner une classe que j'ai créé.
A l'origine, je l'ai créée car j'avais besoin de pouvoir recevoir en entrée un dossier ou un fichier et je voulais dans tous les cas pouvoir sauvegarder sans me soucier de son type.

Explications de la classe

  1. En instanciant la classe vous créé un fichier ZIP dans lequel vous voulez enregistrer vos fichiers / dossier.
  2. Vous choisissez ensuite d'ajouter ce que vous voulez dedans en utilisant les méthodes zipanything(), zipdir() et ziponefile() en sachant que zipanything() accepte en entrée le chemin d'un fichier ou le chemin d'un dossier.
  3. Vous fermez votre fichier ZIP.
import zipfile

class CustomZip:

    zipfile = None

    def __init__(self, zipname):
        self.zipf = zipfile.ZipFile(zipname, 'w')

    def zipanything(self, anything):
        if os.path.isdir(anything):
            self.zipdir(anything)
        elif os.path.isfile(anything):
            self.ziponefile(anything)

    def zipdir(self, path):
        for root, dirs, files in os.walk(path):
            for file in files:
                self.zipf.write(os.path.join(root, file))

    def ziponefile(self, path):
        self.zipf.write(path)

    def close(self):
        self.zipf.close()


Utilisation de la classe

daily_backup = CustomZip("/Volumes/USBkey/Downloads/logo.png")
daily_backup.zipanything("/Volumes/USBkey/Downloads/pdf_files")
daily_backup.zipanything("/Volumes/USBkey/Downloads/check_file.py")
daily_backup.close()

Dans l'exemple d'utilisation pdf_files est un dossier contenant des fichiers PDF.

J'espère que cette classe vous sera utile.