TGTGInsighttelegram intelligenceLIVE / telegram public index
← Python Заметки
Python Заметки avatar

TGINSIGHT POST

Post #299

@pythonotes

Python Заметки

Views2,350Post view count
PostedDec 112/01/2021, 09:01 AM
Post content

Post content

Если часто работаете с архивами, то наверняка знакомы с модулем 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