Comprimir un directorio (carpeta) en un zip o tar en Python

Negocio

A la hora de comprimir un directorio entero (carpeta) en un archivo zip en Python, se puede utilizar os.scandir() u os.listdir() para crear una lista de archivos y utilizar el módulo zipfile para comprimirlos, pero es más fácil utilizar el make_archive () del módulo shutil es más fácil.

Además de zip, también se admiten otros formatos como tar.

Para más información sobre cómo comprimir y descomprimir archivos zip utilizando el módulo zipfile, consulte el siguiente artículo.

Comprimir un directorio (carpeta) en un archivo zip:shutil.make_archive()

El primer argumento, nombre_base, especifica el nombre del archivo zip que se va a crear (sin extensión), y el segundo argumento, formato, especifica el formato del archivo.

Se puede seleccionar lo siguiente para el formato de los argumentos.

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

El tercer argumento, root_dir, especifica la ruta del directorio raíz del directorio que se va a comprimir, y el cuarto argumento, base_dir, especifica la ruta del directorio que se va a comprimir en relación con root_dir. Ambos se establecen por defecto en el directorio actual.

Si se omite base_dir, se comprimirá todo el root_dir.

data/temp
Por ejemplo, supongamos que tenemos un directorio con la siguiente estructura.

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 comprimido con la configuración anterior omitiendo el directorio base se descomprimirá de la siguiente manera.

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

Entonces, si se especifica el directorio en root_dir para base_dir, se mostrará lo siguiente.

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

El new_shutil_sub.zip comprimido con la configuración anterior se descomprimirá de la siguiente manera.

dir_sub
└── test_sub.txt
Copied title and URL