Нашли ошибку?

Найти файлы по расширению

СредняяДописатьГлава 3

#рекурсивный случай#вложенные структурыid: ga-find-files

Папка задана словарём: ключ — имя, значение — размер файла (int) или вложенная папка (dict). Допишите функцию find_files(folder, ext): она возвращает полные пути всех файлов с расширением ext в порядке обхода. Пропуски помечены # TODO.

Пример

project = {
    "main.py": 120,
    "README.md": 40,
    "utils": {"io.py": 300, "data.csv": 900, "deep": {"cfg.py": 10}},
}
find_files(project, ".py")
# ["main.py", "utils/io.py", "utils/deep/cfg.py"]

Правила

Решение

def find_files(folder: dict, ext: str) -> list[str]:
    """Возвращает пути всех файлов с расширением ext внутри folder."""
    result: list[str] = []
    _walk(folder, "", ext, result)
    return result


def _walk(folder: dict, prefix: str, ext: str, result: list[str]) -> None:
    """Обходит папку, дописывая подходящие пути в result."""
    for name, item in folder.items():
        path = prefix + name
        if isinstance(item, dict):
            # TODO: рекурсивный случай — обойдите подпапку.
            #       Какой префикс будет у путей внутри неё?
            pass
        elif name.endswith(ext):
            # TODO: базовый случай — файл подходит
            pass

Можно решать и в своём редакторе: «Скопировать с тестами» и запустите python3 find_files.py — тесты те же, результат покажет ✓ / ✗ и итог.