Рекурсивный поиск файлов по шаблону с возможностью логирования

Обходите дерево каталогов через os.walk, а имена проверяйте fnmatch. Опционально печатайте посещаемую директорию и совпавшие файлы; по умолчанию не следуйте симлинкам каталогов.

Короткий ответ

Что ответить на собеседовании

Обходите дерево каталогов через os.walk, а имена проверяйте fnmatch. Опционально печатайте посещаемую директорию и совпавшие файлы; по умолчанию не следуйте симлинкам каталогов.

Подробный разбор

Ответ с пояснениями

Условие

Создайте функцию, которая принимает два аргумента: путь к директории и шаблон имени файлов. Функция должна возвращать список всех файлов, соответствующих шаблону, найденных в указанной директории и во всех её поддиректориях. Реализуйте опцию логирования, позволяющую выводить в консоль каждый посещаемый каталог и имена найденных файлов, если эта опция включена.

def find_files(root_path: str, pattern: str, log: bool = False) -> List[str]:
    # реализация функции
    pass

Ответ

Обходите дерево каталогов через os.walk, а имена проверяйте fnmatch. Опционально печатайте посещаемую директорию и совпавшие файлы; по умолчанию не следуйте симлинкам каталогов.

Пример с явной проверкой корня:

import os
import fnmatch

def find_files(root_path: str, pattern: str, log: bool = False) -> list[str]:
    if not os.path.isdir(root_path):
        raise NotADirectoryError(root_path)
    result = []
    def fail(error):
        raise error
    for directory, _, files in os.walk(root_path, onerror=fail, followlinks=False):
        if log:
            print('Directory:', directory)
        for name in files:
            path = os.path.join(directory, name)
            if fnmatch.fnmatch(name, pattern) and os.path.isfile(path):
                result.append(path)
                if log:
                    print('File:', path)
    return result

Шаблон применяется к имени, не к полному пути. Симлинки на файлы могут попасть в результат. Порядок обхода не гарантирован; при необходимости отсортируйте итог.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее