Comprimir un directorio (cartafol) nun zip ou tar en Python

Negocios

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.

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