Komprimering av en katalog (mapp) till zip eller tar i Python

Företag

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.

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