TGViewer
Python Заметки Python Заметки @pythonotes · 2.2K subscribers
Post #299 2.35K
Если часто работаете с архивами, то наверняка знакомы с модулем 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'
zip_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
More from @pythonotes
  1. Sep 21, 2026­ WebAssembly это мощная технология позволяющая загружать практически любое приложение в б…
  2. Aug 17, 2026Не так давно столкнулся с API который в ответе с ошибкой присылал только статус-код. Без п…
  3. Jul 20, 2026У меня основная ОС это Linux. Но нередко требуется делать сборку клиента под Windows. Соби…
  4. Jul 13, 2026В прошлый раз был пример с понижением привелегий процесса. Проблема в том, что обратно под…
  5. Jul 6, 2026Модуль pwd может использоваться для считывания информации о пользователях из базы данных п…
  6. Jun 22, 2026Недавно я реализовал Multi Tenancy систему на FastAPI + SQLAlchemy и пересобрал её в небол…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →