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.
- Powiązane artykuły:zipfile do kompresji i dekompresji plików ZIP w Pythonie
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