Ao comprimir um directório (pasta) inteiro num ficheiro zip em Python, pode usar os.scandir() ou os.listdir() para criar uma lista de ficheiros e usar o módulo zipfile para os comprimir, mas é mais fácil usar o make_archive () do módulo shutil é mais fácil.
Para além do zip, são também suportados outros formatos como o alcatrão.
Para mais informações sobre a compressão e descompressão de ficheiros zip usando o módulo de ficheiros zip, consulte o artigo seguinte.
- Artigos relacionados:ficheiro zip para comprimir e descomprimir ficheiros ZIP em Python
Comprimir um directório (pasta) num ficheiro zip:shutil.make_archive()
O primeiro argumento, nome_base, especifica o nome do ficheiro zip a ser criado (sem extensão), e o segundo argumento, formato, especifica o formato do arquivo.
O seguinte pode ser seleccionado para o formato de argumento.
'zip'
'tar'
'gztar'
'bztar'
'xztar'
O terceiro argumento, root_dir, especifica o caminho do directório raiz do directório a ser comprimido, e o quarto argumento, base_dir, especifica o caminho do directório a ser comprimido em relação ao root_dir. Ambos são definidos para o directório actual, por defeito.
Se o “base_dir” for omitido, todo o “root_dir” será comprimido.
data/temp
Por exemplo, suponha que temos um directório com a 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 novo_shutil.zip comprimido com as configurações acima omitindo a base_dir será descomprimido como se segue.
new_shutil ├── dir_sub │ └── test_sub.txt └── test.txt
Então, se o directório em root_dir for especificado para base_dir, será mostrado o seguinte.
shutil.make_archive('data/temp/new_shutil_sub', 'zip', root_dir='data/temp/dir', base_dir='dir_sub')
O novo_shutil_sub.zip comprimido com as configurações acima será descomprimido como se segue.
dir_sub
└── test_sub.txt