Как создать zip-архив каталога - PullRequest
367 голосов
/ 06 декабря 2009

Как я могу создать zip-архив структуры каталогов в Python?

Ответы [ 21 ]

0 голосов
/ 24 декабря 2016

Я подготовил функцию, объединив решение Марка Байерса с комментариями Реймунда и Мортена Цилмера (относительный путь и включая пустые каталоги). В качестве наилучшей практики with используется в построении файлов ZipFile.

Функция также подготавливает имя zip-файла по умолчанию с именем zip-каталога и расширением .zip. Таким образом, он работает только с одним аргументом: исходный каталог для архивирования.

import os
import zipfile

def zip_dir(path_dir, path_file_zip=''):
if not path_file_zip:
    path_file_zip = os.path.join(
        os.path.dirname(path_dir), os.path.basename(path_dir)+'.zip')
with zipfile.ZipFile(path_file_zip, 'wb', zipfile.ZIP_DEFLATED) as zip_file:
    for root, dirs, files in os.walk(path_dir):
        for file_or_dir in files + dirs:
            zip_file.write(
                os.path.join(root, file_or_dir),
                os.path.relpath(os.path.join(root, file_or_dir),
                                os.path.join(path_dir, os.path.pardir)))
...