Когато компресирате цяла директория (папка) в zip файл в Python, можете да използвате os.scandir() или os.listdir(), за да създадете списък с файлове и да използвате модула zipfile, за да ги компресирате, но е по-лесно да използвате make_archive () на модула shutil.
В допълнение към zip се поддържат и други формати, например tar.
За повече информация относно компресирането и разкомпресирането на zip файлове с помощта на модула zipfile, моля, вижте следната статия.
Компресиране на директория (папка) в zip файл:shutil.make_archive()
Първият аргумент, base_name, указва името на създавания zip файл (без разширение), а вторият аргумент, format, указва формата на архива.
За формата на аргумента могат да бъдат избрани следните варианти.
'zip'
'tar'
'gztar'
'bztar'
'xztar'
Третият аргумент, root_dir, указва пътя до главната директория на директорията, която ще се компресира, а четвъртият аргумент, base_dir, указва пътя до директорията, която ще се компресира, спрямо root_dir. По подразбиране и двата са зададени като текущата директория.
Ако се пропусне base_dir, ще се компресира целият root_dir.
data/temp
Например, да предположим, че имаме директория със следната структура.
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, в който е пропуснат base_dir, ще бъде декомпресиран по следния начин.
new_shutil ├── dir_sub │ └── test_sub.txt └── test.txt
След това, ако директорията в root_dir е зададена за base_dir, ще се покаже следното.
shutil.make_archive('data/temp/new_shutil_sub', 'zip', root_dir='data/temp/dir', base_dir='dir_sub')
Компресираният с горните настройки файл new_shutil_sub.zip ще бъде декомпресиран по следния начин.
dir_sub
└── test_sub.txt