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

Стандартные библиотеки в Python. Библиотека os (поиск по файловой системе). Приложение 2 к видео 10

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

Приложение 2 к уроку. См. приложение 1.

Поиск по файловой системе

Вообще материалов по библиотеке os и связанных с ней других библиотек и тем огромное количество, так что приготовьтесь, что постов по этой теме будет довольно много. Чтобы бы вы не заскучали, буду время от времени отвлекаться на другие темы.

Сегодня чисто практическая работа. Приведу пример алгоритма поиска по файловой системе Linux. Один из нескольких возможных вариантов. В других приложениях к уроку 10 приведу другие возможные алгоритмы поиска.

Ну, нет намерения рассказывать здесь, что такое рекурсия. Будет у меня отдельный курс по алгоритмам, вот там расскажу.

Программу поиска см. ниже.

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

Пояснение к программе

  • На входе программа получает начальный каталог, откуда необходимо начинать поиск. Например '/', '/home', '..', '.' и т.д. Далее осуществляет обход дерева каталогов начиная с указанного каталога.
  • Функция добавляет к абсолютному пути имя файла.
  • Программа ориентирована на Unix-системы, поэтому правильно выполнить её не получится. Позднее в другом я покажу, как сделать её универсальной. Дам подсказку: дело в функции add. Либо сделать её более универсальной, либо использовать метод из подбиблиотеки: os.path. Конечно, это не всё, надо бы познакомиться с модулем stat, который несколько иной для Windows.
  • Обратите внимание, что используется модуль stat для интерпретации данных полученных из os.lstst().
  • Основу алгоритма составляет просмотр списка каталога и если попадается каталог, то происходит рекурсивный повтор алгоритма. Могут быть разные вариации, например, в начале выводится весь список, а потом проходим список только каталогов, если они есть, о осуществляем рекурсивные вызовы. Могут быть и другие подходы и я покажу их в других постах.
  • Обратите внимание на использование try. Оператор необходим на тот случай, если есть запрет на получение списка элементов каталога.

Приведём справочную информацию по объекту, возвращаемому методом lstat() (см. программу выше): stat_info = os.stat(nfile).

  • stat_info.st_mode — биты и файла и тип файла. Расшифровывается, обычно средствами отдельного модуля stat (см. программу выше).
  • stat_info.st_ino — значение может по разному интерпретироваться в разных операционных системах. В Linux уникальный номер inode файла (структура с его описанием).
  • stat_info.st_dev — идентификатор устройства, где расположен файл.
  • stat_info.st_nlink — количество жестких ссылок на данный файл.
  • stat_info.st_uid — идентификатор пользователя, который владеет файлом.
  • stat_info.st_gid — идентификатор группы владельца файла.
  • stat_info.st_size — длина файла в байтах. Заметим, что мы знаем другой способ узнать длину файла. Но для этого необходимо его открыть. Но данный способ более универсален, так как файл не всегда удаётся открыть.
  • stat_info.st_atime — время последнего доступа к файлу, которое выражено в секундах.
  • stat_info.st_mtime — время последней модификации файла в секундах.
  • stat_info.st_ctime — время создания файла или изменение метаданных файла.
  • stat_info.st_atime_ns — время последнего доступа в наносекундах.
  • stat_info.st_mtime_ns — время последней модификации файла в наносекундах.
  • stat_info.st_ctime_ns — время создания файла или изменение метаданных файла в наносекундах.

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

Ну и какими программами вы удивите меня сегодня?
Ну и какими программами вы удивите меня сегодня?