Kompresja katalogu (folderu) do postaci pliku zip lub tar w Pythonie

Biznes

Podczas kompresji całego katalogu (folderu) do pliku zip w Pythonie, możesz użyć os.scandir() lub os.listdir(), aby utworzyć listę plików i użyć modułu zipfile do ich skompresowania, ale łatwiej jest użyć make_archive () modułu shutil jest łatwiejsze.

Oprócz formatu zip, obsługiwane są również inne formaty, takie jak tar.

Więcej informacji na temat kompresji i dekompresji plików zip przy użyciu modułu zipfile można znaleźć w poniższym artykule.

Kompresja katalogu (folderu) do pliku zip:shutil.make_archive()

Pierwszy argument, base_name, określa nazwę pliku zip, który ma zostać utworzony (bez rozszerzenia), a drugi argument, format, określa format archiwum.

Dla formatu argumentu można wybrać następujące opcje.

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

Trzeci argument, root_dir, określa ścieżkę katalogu głównego katalogu, który ma być skompresowany, a czwarty argument, base_dir, określa ścieżkę katalogu, który ma być skompresowany względem root_dir. Oba są domyślnie ustawione na katalog bieżący.

Jeśli base_dir jest pominięty, cały root_dir zostanie skompresowany.

data/temp
Na przykład, załóżmy, że mamy katalog o następującej strukturze.

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

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

Plik new_shutil.zip skompresowany z powyższymi ustawieniami z pominięciem base_dir zostanie zdekompresowany w następujący sposób.

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

Następnie, jeśli katalog w root_dir jest określony jako base_dir, pojawi się następujący komunikat.

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

New_shutil_sub.zip skompresowany z powyższymi ustawieniami zostanie zdekompresowany w następujący sposób.

dir_sub
└── test_sub.txt