Сообщить об ошибке.

Функция scandir() модуля os в Python

Получение информации о всех файлах в каталоге/директории

Синтаксис:

import os

os.scandir(path='.')

Параметры:

  • path - путь к каталогу, может принимать str или bytes

Возвращаемое значение:

Описание:

Функция scandir() модуля os возвращает итератор entry_it объектов os.DirEntry, соответствующих записям в каталоге, заданном путем path. Записи приводятся в произвольном порядке, а специальные символы '.' и '..' не включены.

Использование os.scandir() вместо os.listdir() может значительно повысить производительность кода, который нуждается в информации о типе файла или атрибуте файла, поскольку объекты os.DirEntry предоставляют эту информацию, если операционная система предоставляет ее при сканировании каталога.

Все методы объекта os.DirEntry могут выполнять системный вызов, но для методов os.DirEntry.is_dir() и os.DirEntry.is_file() обычно требуется только системный вызов для символических ссылок. os.DirEntry.stat() всегда требует системного вызова в Unix, в Windows требуется только один системный вызов для символических ссылок.

Аргумент path может принимать объекты, представляющие путь к файловой системе, такие как pathlib.PurePath. Если путь имеет байтовый типа, переданный прямо с качестве байтовой строки или косвенно через интерфейс PathLike, тип атрибутов name и path каждого объекта os.DirEntry будет байтовой строкой, во всех остальных случаях они будут иметь строковой тип.

В OS Unix аргумент path также поддерживает файловые дескрипторы, при этом дескриптор должен ссылаться на каталог path.

Функция scandir() вызывает событие аудита os.scandir с аргументом path.

Итератор os.scandir() поддерживает протокол менеджера контекста и имеет следующий метод:

scandir.close():

Метод scandir.close() закрывает итератор и освобождает полученные ресурсы.

Этот метод вызывается автоматически, когда итератор исчерпан или когда происходит ошибка во время итерации. Однако рекомендуется вызывать его явно или использовать оператор with.

Пример отображения всех файлов при помощи scandir():

В примере показано простое использование scandir() для отображения всех файлов, за исключением каталогов по указанному пути, которые не начинаются с '.'. Вызов entry.is_file() обычно не вызывает дополнительного системного вызова:

with os.scandir(path) as it:
    for entry in it:
        if not entry.name.startswith('.') and entry.is_file():
            print(entry.name)

Дополнительно смотрите:

  • os.listdir() - список файлов в директории/каталоге,
  • os.walk() - рекурсивный обход каталога,
  • glob.glob() - рекурсивный поиск файлов по шаблону,
  • pathlib.Path.glob() - отбор файлов из каталога/директории по шаблону.