Compressão de um directório (pasta) para um zip ou alcatrão em Python

O negócio

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.

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
Copied title and URL