При сжатии целого каталога (папки) в zip-файл в Python можно использовать os.scandir() или os.listdir() для создания списка файлов и использовать модуль zipfile для их сжатия, но проще использовать make_archive () модуля shutil.
Помимо zip, поддерживаются и другие форматы, такие как tar.
Для получения дополнительной информации о сжатии и распаковке zip-файлов с помощью модуля zipfile, пожалуйста, обратитесь к следующей статье.
- Похожие статьи:zipfile для сжатия и распаковки ZIP-файлов в Python
Сжать каталог (папку) в 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
Затем, если для base_dir указан каталог в root_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