Ao comprimir un directorio completo (cartafol) nun ficheiro zip en Python, pode usar os.scandir() ou os.listdir() para crear unha lista de ficheiros e usar o módulo zipfile para comprimilos, pero é máis fácil de usalo. o make_archive () do módulo Shuil é máis sinxelo.
Ademais de zip, tamén se admiten outros formatos como tar.
Para obter máis información sobre comprimir e descomprimir ficheiros zip usando o módulo zipfile, consulte o seguinte artigo.
- Artigos relacionados:zipfile para comprimir e descomprimir ficheiros ZIP en Python
Comprimir un directorio (cartafol) nun ficheiro zip:shutil.make_archive()
O primeiro argumento, nome_base, especifica o nome do ficheiro zip que se vai crear (sen extensión), e o segundo argumento, formato, especifica o formato de arquivo.
Pódese seleccionar o seguinte para o formato de argumento.
zip'
tar'
gztar'
bztar'
xztar'
O terceiro argumento, root_dir, especifica a ruta do directorio raíz do directorio que se vai comprimir, e o cuarto argumento, base_dir, especifica a ruta do directorio que se vai comprimir en relación co root_dir. Ambos están configurados no directorio actual por defecto.
Se se omite base_dir, comprimirase todo o root_dir.
data/temp
Por exemplo, supoñamos que temos un directorio coa seguinte estrutura.
dir ├── dir_sub │ └── test_sub.txt └── test.txt
import shutil shutil.make_archive('data/temp/new_shutil', 'zip', root_dir='data/temp/dir')
O new_shutil.zip comprimido coa configuración anterior que omite o base_dir descomprimirase do seguinte xeito.
new_shutil ├── dir_sub │ └── test_sub.txt └── test.txt
Entón, se se especifica o directorio en root_dir para base_dir, mostrarase o seguinte.
shutil.make_archive('data/temp/new_shutil_sub', 'zip', root_dir='data/temp/dir', base_dir='dir_sub')
O new_shutil_sub.zip comprimido coa configuración anterior descomprimirase do seguinte xeito.
dir_sub
└── test_sub.txt