Получи случайную криптовалюту за регистрацию!

Если часто работаете с архивами, то наверняка знакомы с модуле | Python Заметки

Если часто работаете с архивами, то наверняка знакомы с модулем zipfile.
Нет ничего сложного добавить директорию в архив.

import zipfile
from pathlib import Path

dir_name = '~/input_files'
zip_name = '~/archive.zip'

with zipfile.ZipFile(zip_name, 'w') as zip:
for file in Path(dir_name).glob('**/*'):
zip.write(file, file.relative_to(dir_name).as_posix())

Довольно немногословно. Но можно короче! В модуле shutil уже есть готовый метод

dir_name = '~/input_files'
zip_name = '~/archive'
aip_file = shutil.make_archive(zip_name, 'zip', root_dir=dir_name)

А что насчет распаковки?
Здесь проще, даже с zipfile это одна строка

zip_file = '~/archive.zip'
out_dir = '~/out_dir'
zipfile.ZipFile(zip_file).extractall(out_dir)

Ну и тем более в shutil

shutil.unpack_archive(zip_file, out_dir)

В примерах не делается expanduser для краткости

В данном случае функция из shutil более универсальна, так как второй аргумент format задаёт алгоритм сжатия, от чего зависит выбор библиотеки. Если написать формат tar, то вместо zipfile будет использоваться tarfile.
Поддерживаются форматы zip, tar, gztar, bztar, xztar. Но только если на текущем хосте доступны соответствующие библиотеки.

Из недостатков можно назвать невозможность запаковать просто один файл. Источником может быть только директория. Проблема легко решается, но всё же.

Интересный момент. При наличии в Python2 функции shutil.make_archive() там отсутствует shutil.unpack_archive(). А появился он только в 3.7! Не очень понятно почему, но это еще один повод переходить на Python3

#libs #tricks