Сжатие каталога (папки) в 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

Затем, если для 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