Доброго времени суток, читатели, зрители моего канала programmer's notes. Не забывайте подписываться и писать свои комментарии к моим статьям и видео.
А это подборки моих материалов на канале
Приложение 1 один к видеоуроку
О библиотеке shutil
Библиотека в основном рассчитана на операции с группами файлов, с деревом каталогов. Опять же хорошее дополнение к библиотеке os.
В данном приложении не будем рассматривать команды групповых операций.
В библиотеке есть и функции копирования одиночных файлов. При чем их целых три: copyfile(), copy(), copy2(). Все три функции имеют одинаковые (похожие) параметры. Но есть некоторые отличия. Рассмотрим параметры функции copyfile().
- 1-й, имя копируемого файла. Полный или относительный путь.
- 2-й, имя файла, куда будет скопирован файл, указанный в первом параметре.
- 3-й, параметр (follow_symlinks) определяет что делать с символьной ссылкой. Если параметр равен True, а копируемый файл является символической ссылкой, то будет скопирован файл, на который указывает данная символическая ссылка. Если параметр равен False, то символическая ссылка будет скопирована как обычный файл, т.е. будет создана ещё одна символическая ссылка.
Параметры для функций copy() и copy2() такие же. Но второй параметр может указывать на каталог. В этом случае файл копируется в каталог со своим исходным именем.
Есть и другие более тонкие отличия.
- copyfile() не копирует какие либо свойства файла (метаданные).
- copy() копирует права доступа.
- copy2() копирует кроме прав доступа другие метаданные, в частности временные характеристики.
Следующая функция copymode(), имеет такие параметры, как и предыдущие функции. Осуществляет копирование прав доступа одного файла на другой существующий файл.
copystat() имеет аналогичные параметры и копирует все возможные метаданные файла.
Функция chown() имеет следующие параметры.
- 1-й, путь к файлу или каталогу.
- 2-й, имя пользователя, идентификатор пользователя или None (тогда речь идёт о текущем пользователе).
- 3-й, имя группы или None (текущая группа).
Функция изменяет пользователя файла или каталогу и группу.
Функция disk_usage(). Имеет один параметр, путь к файлу или каталогу. Возвращает кортеж содержащий: объём диска, на котором расположен файл или каталог, объём занятой части диска, объём свободной части диска.
print(tuple(shutil.disk_usage('/home')))
Результат выполнения строки
(983347249152, 275584602112, 657735823360)
Функция which() используется для поиска исполняемого файла в системе. Первым параметром идет имя файла. Вторым параметром является маска поиска (исполняемый файл). Третьим параметром указывается путь для поиска. Если путь не указан, то поиск идёт по путям из окружения.
print(shutil.which('cat'))
Результат выполнения
/usr/bin/cat
Обратимся теперь к примерам
Следующий пример копирует все файлы из указанного каталога в указанный же каталог.
Это пример копирования одиночного файла с обработкой ситуации, когда должен быть заменён файл, у которого сброшен бит записи, т.е. запрещено перезаписывать. Если происходит ошибка, то программа устанавливает бит записи и повторяет попытку.
Хорошего программирования. Оставляйте свои комментарии, не забывайте про лайки и подписывайтесь на мой канал programmer's notes.