Comprimir un directori (carpeta) en un zip o tar a Python

Negocis

Quan comprimiu un directori (carpeta) sencer en un fitxer zip a Python, podeu utilitzar os.scandir() o os.listdir() per crear una llista de fitxers i utilitzar el mòdul zipfile per comprimir-los, però és més fàcil d’utilitzar. el make_archive () del mòdul Shuil és més fàcil.

A més del zip, també s’admeten altres formats com ara tar.

Per obtenir més informació sobre com comprimir i descomprimir fitxers zip mitjançant el mòdul zipfile, consulteu l’article següent.

Comprimiu un directori (carpeta) en un fitxer zip:shutil.make_archive()

El primer argument, nom_base, especifica el nom del fitxer zip que s’ha de crear (sense extensió), i el segon argument, format, especifica el format de l’arxiu.

Es pot seleccionar el següent per al format d’argument.

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

El tercer argument, director_arrel, especifica la ruta del directori arrel del directori a comprimir, i el quart argument, dir_base, especifica la ruta del directori que s’ha de comprimir en relació amb el directori_arrel. Tots dos estan configurats al directori actual per defecte.

Si s’omet base_dir, es comprimirà tot el root_dir.

data/temp
Per exemple, suposem que tenim un directori amb l’estructura següent.

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

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

El new_shutil.zip comprimit amb la configuració anterior que omet el base_dir es descomprimirà de la següent manera.

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

Aleshores, si s’especifica el directori a root_dir per a base_dir, es mostrarà el següent.

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

El new_shutil_sub.zip comprimit amb la configuració anterior es descomprimirà de la següent manera.

dir_sub
└── test_sub.txt