När du komprimerar en hel katalog (mapp) till en zip-fil i Python kan du använda os.scandir() eller os.listdir() för att skapa en lista med filer och använda zipfile-modulen för att komprimera dem, men det är enklare att använda make_archive () i shutil-modulen.
Förutom zip stöds även andra format, t.ex. tar.
Mer information om hur du komprimerar och avkomprimerar zip-filer med hjälp av zipfile-modulen finns i följande artikel.
- Relaterade artiklar:zipfile för att komprimera och avkomprimera ZIP-filer i Python
Komprimera en katalog (mapp) till en zip-fil:shutil.make_archive()
Det första argumentet, base_name, anger namnet på den zip-fil som ska skapas (utan tillägg) och det andra argumentet, format, anger arkivformatet.
Följande kan väljas för argumentformatet.
'zip'
'tar'
'gztar'
'bztar'
'xztar'
Det tredje argumentet, root_dir, anger sökvägen till rotkatalogen för den katalog som ska komprimeras och det fjärde argumentet, base_dir, anger sökvägen till den katalog som ska komprimeras relativt till root_dir. Båda är som standard inställda på den aktuella katalogen.
Om base_dir inte anges kommer hela root_dir att komprimeras.
data/temp
Anta till exempel att vi har en katalog med följande struktur.
dir ├── dir_sub │ └── test_sub.txt └── test.txt
import shutil shutil.make_archive('data/temp/new_shutil', 'zip', root_dir='data/temp/dir')
New_shutil.zip komprimerad med ovanstående inställningar utan base_dir kommer att dekomprimeras på följande sätt.
new_shutil ├── dir_sub │ └── test_sub.txt └── test.txt
Om katalogen i root_dir anges som base_dir visas följande.
shutil.make_archive('data/temp/new_shutil_sub', 'zip', root_dir='data/temp/dir', base_dir='dir_sub')
New_shutil_sub.zip komprimerad med ovanstående inställningar kommer att dekomprimeras på följande sätt.
dir_sub
└── test_sub.txt