Компресиране на директория (папка) в zip или tar в Python

Бизнес

Когато компресирате цяла директория (папка) в 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
Copied title and URL