Comprimere una directory (cartella) in uno zip o tar in Python

Attività commerciale

Quando si comprime un'intera directory (cartella) in un file zip in Python, si può usare os.scandir() o os.listdir() per creare una lista di file e usare il modulo zipfile per comprimerli, ma è più facile usare make_archive () del modulo shutil.

Oltre a zip, sono supportati anche altri formati come tar.

Per maggiori informazioni su come comprimere e decomprimere i file zip usando il modulo zipfile, fate riferimento al seguente articolo.

Comprimere una directory (cartella) in un file zip:shutil.make_archive()

Il primo argomento, base_name, specifica il nome del file zip da creare (senza estensione), e il secondo argomento, format, specifica il formato dell'archivio.

I seguenti possono essere selezionati per il formato dell'argomento.

  • 'zip'
  • 'tar'
  • 'gztar'
  • 'bztar'
  • 'xztar'

Il terzo argomento, root_dir, specifica il percorso della directory principale della directory da comprimere, e il quarto argomento, base_dir, specifica il percorso della directory da comprimere rispetto a root_dir. Entrambi sono impostati alla directory corrente per impostazione predefinita.

Se base_dir è omesso, l'intera root_dir sarà compressa.

data/temp
Per esempio, supponiamo di avere una directory con la seguente struttura.

dir
├── dir_sub
   └── test_sub.txt
└── test.txt
import shutil

shutil.make_archive('data/temp/new_shutil', 'zip', root_dir='data/temp/dir')

Il new_shutil.zip compresso con le impostazioni di cui sopra omettendo la base_dir sarà decompresso come segue.

new_shutil
├── dir_sub
   └── test_sub.txt
└── test.txt

Poi, se la directory in root_dir è specificata per base_dir, verrà mostrato quanto segue.

shutil.make_archive('data/temp/new_shutil_sub', 'zip', root_dir='data/temp/dir', base_dir='dir_sub')

Il new_shutil_sub.zip compresso con le impostazioni di cui sopra sarà decompresso come segue.

dir_sub
└── test_sub.txt
Copied title and URL