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.
- Artículos relacionados:zipfile para comprimir y descomprimir archivos ZIP en Python
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