import os os.scandir(path='.')
os.DirEntry
Функция 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()
- отбор файлов из каталога/директории по шаблону.