Compression d’un répertoire (dossier) dans un zip ou un tar en Python

Affaires

Pour compresser un répertoire (dossier) entier dans un fichier zip en Python, vous pouvez utiliser os.scandir() ou os.listdir() pour créer une liste de fichiers et utiliser le module zipfile pour les compresser, mais il est plus facile d'utiliser la fonction make_archive () du module shutil.

Outre le zip, d'autres formats tels que le tar sont également pris en charge.

Pour plus d'informations sur la compression et la décompression des fichiers zip à l'aide du module zipfile, veuillez consulter l'article suivant.

Compresser un répertoire (dossier) en un fichier zip:shutil.make_archive()

Le premier argument, base_name, spécifie le nom du fichier zip à créer (sans extension), et le second argument, format, spécifie le format de l'archive.

Les options suivantes peuvent être sélectionnées pour le format de l'argument.

  • 'zip'
  • 'tar'
  • 'gztar'
  • 'bztar'
  • 'xztar'

Le troisième argument, root_dir, indique le chemin du répertoire racine du répertoire à compresser, et le quatrième argument, base_dir, indique le chemin du répertoire à compresser par rapport au root_dir. Les deux sont définis par défaut sur le répertoire courant.

Si base_dir est omis, le répertoire racine entier sera compressé.

data/temp
Par exemple, supposons que nous ayons un répertoire avec la structure suivante.

dir
├── dir_sub
   └── test_sub.txt
└── test.txt
import shutil

shutil.make_archive('data/temp/new_shutil', 'zip', root_dir='data/temp/dir')

Le fichier new_shutil.zip compressé avec les paramètres ci-dessus, sans le répertoire de base, sera décompressé comme suit.

new_shutil
├── dir_sub
   └── test_sub.txt
└── test.txt

Ensuite, si le répertoire dans root_dir est spécifié pour base_dir, ce qui suit sera affiché.

shutil.make_archive('data/temp/new_shutil_sub', 'zip', root_dir='data/temp/dir', base_dir='dir_sub')

Le fichier new_shutil_sub.zip compressé avec les paramètres ci-dessus sera décompressé comme suit.

dir_sub
└── test_sub.txt
Copied title and URL