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.
- Articoli correlati:zipfile per comprimere e decomprimere file ZIP in Python
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