Найти тему
programmer's notes (python and more)

Стандартные библиотеки в Python. Библиотека shutil. Приложение 2 к видео 14

Доброго времени суток, читатели, зрители моего канала programmer's notes. Не забывайте подписываться и писать свои комментарии к моим статьям и видео.

А это подборки моих материалов на канале

Приложение 2 один к видеоуроку (см. Приложение 1)

Библиотека shutil

Продолжаем рассказывать о библиотеке shutil.

Групповая обработка файлов в shutil

Сегодня поговорим о функциях, выполняющих групповые операции.

  • copytree() — осуществляет копирование дерева каталогов. Прототип функции
    shutil.copytree(src, dst, symlinks=False, ignore=None,
    copy_function=copy2, ignore_dangling_symlinks=False,
    dirs_exist_ok=False)
    , где
    src - путь к корню копируемого дерева;
    dst - путь, куда копируем дерево;
    symlink - если True, то копируется сама символическая ссылка, если False, то копируется объект, на который указывает символическая ссылка. Если False и объекта, на которую указывает ссылка не существует, то бросается исключение;
    ignore - может указывать на функцию ignore_patterns, указывающую, какие файлы следует пропускать;
    copy_function - указывает на функцию копирования файла. По умолчанию это copy2(). Но можно написать и свою собственную функцию;
    ignore_dangling_symlinks - если True, то отключается исключения в случае, если объекта, на который указывает символическая ссылка нет;
    dirs_exist_ok - если True, то не вызывается исключения, когда dst не существует.
  • move() — перемещает файл или дерево каталогов. Прототип функции
    move(src, dst, copy_function=copy2), где
    src - путь к каталогу или файлу, который следует переместить.
    dst - путь, куда перемещать.
    copy_function - функция, которая будет копировать файл. По умолчанию это copy2(), но можно указать и свою.
  • rmtree() — удаляет дерево каталогов. Прототип функции
    rmtree(path, ignore_errors=False, onerror=None, *, dir_fd=None), где
    path - каталога, который следует удалить, вместе с подкаталогами;
    ignore_errors - если True, то ошибки, возникшие при удалении, игнорируются;
    onerro - можно указать обработчик ошибок, возникших при удалении;
    dir_fd - не обязательный дескриптор каталога.
  • make_archive() — создаёт архив указанного формата. Прототип функции
    make_archive(base_name, format[,
    root_dir[, base_dir[, verbose[,
    dry_run[, owner[, group[, logger]]]]]]])

    base_name - имя файла-архива, включая его путь;
    format - строка-формат архива;
    root_dir - корневой каталог архива;
    base_dir - путь к каталогу, откуда начинается архивирование;
    verbose - параметр не используется;
    dry_run - если значение True, то архив не создаётся, но делается запись в журнал;
    owner - владелец создаваемого архива;
    group - группа создаваемого архива;
    logger - экземпляр объекта logging.Logger (журналирование).
  • unpack_archive() — распаковка архива. Прототип
    unpack_archive(filename[, extract_dir[, format]]), где
    filename - имя архива;
    extract_dir - куда распаковываем;
    format - формат архива.

Есть еще несколько функций, касающихся архивирования. Я не буду подробно на них останавливаться, но лишь перечислю

  • get_archive_formats() — получить список кортежей описывающих поддерживаемые форматы архивирования.
  • get_unpack_formats() — аналогично список распаковщиков.
  • register_archive_format() — регистрация нового формата архиватора.
  • register_unpack_format() — регистрация нового формата распаковщика.

Примеры использования shutil

shutil отличная высокоуровневая библиотека для работы с деревьями каталогов. Конечно, я как представитель старой школы, предпочёл бы сам написать подобную библиотеку, но не всегда же у вас будет время на это.

Создание архивов

#!/usr/bin/python3
import  shutil
# создание zip-архива каталога
pt_from = input()
pt_to = input()
shutil.make_archive(pt_to, 'zip', pt_from)

Программа спрашивает каталог, который подлежит архивированию, имя архива, который можно указать с полным путём к нему. Например, вводим

/home/vladislav/shutil
./arh

Получаем в текущем каталоге файл-архив arh.zip.

Копирование с журналированием

Программа выводит на стандартное устройства информацию, какие каталоги она копирует

Текст программы см. ниже
Текст программы см. ниже
primer87.py

Использование logging, конечно не обязательно, тем более, что этот класс я еще не представлял на канале, а можно просто

print(f'Working in {path}')

Ну наверное и всё с shutil, но в одном из ближайших статей представлю рекурсивную функцию копирования дерева каталогов.

Хорошего программирования. Оставляйте свои комментарии, не забывайте про лайки и подписывайтесь на мой канал programmer's notes.

Попробовали библиотеку? А теперь напишите такую же.
Попробовали библиотеку? А теперь напишите такую же.