Komprimace adresáře (složky) do formátu zip nebo tar v jazyce Python

Podnikání

Při kompresi celého adresáře (složky) do souboru zip v jazyce Python můžete použít os.scandir() nebo os.listdir() pro vytvoření seznamu souborů a použít modul zipfile pro jejich kompresi, ale jednodušší je použít make_archive () modulu shutil.

Kromě formátu zip jsou podporovány i další formáty, například tar.

Další informace o komprimaci a dekomprimaci souborů zip pomocí modulu zipfile naleznete v následujícím článku.

Komprimace adresáře (složky) do souboru zip:shutil.make_archive()

První argument, base_name, určuje název vytvářeného souboru zip (bez přípony) a druhý argument, format, určuje formát archivu.

Pro formát argumentu lze zvolit následující možnosti.

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

Třetí argument, root_dir, určuje cestu ke kořenovému adresáři adresáře, který má být komprimován, a čtvrtý argument, base_dir, určuje cestu k adresáři, který má být komprimován, vzhledem k root_dir. Oba jsou ve výchozím nastavení nastaveny na aktuální adresář.

Pokud je base_dir vynechán, bude komprimován celý root_dir.

data/temp
Předpokládejme například, že máme adresář s následující strukturou.

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

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

Soubor new_shutil.zip zkomprimovaný s výše uvedeným nastavením a s vynecháním souboru base_dir bude dekomprimován následujícím způsobem.

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

Pakliže je pro base_dir zadán adresář v root_dir, zobrazí se následující.

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

Soubor new_shutil_sub.zip zkomprimovaný s výše uvedeným nastavením bude dekomprimován následujícím způsobem.

dir_sub
└── test_sub.txt