Рекурсивный проход по директории и вывод всех файлов

Используйте os.walk и выводите абсолютный путь каждого файла. Явно выберите правила для символических ссылок и ошибок доступа.

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

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

Используйте os.walk и выводите абсолютный путь каждого файла. Явно выберите правила для символических ссылок и ошибок доступа.

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

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

Условие

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

Ответ

Используйте os.walk и выводите абсолютный путь каждого файла. Явно выберите правила для символических ссылок и ошибок доступа.

import os
from pathlib import Path

def list_files(directory):
    root = Path(directory).resolve()
    if not root.is_dir():
        raise NotADirectoryError(root)
    def fail(error):
        raise error
    for current, directories, files in os.walk(root, followlinks=False, onerror=fail):
        directories.sort()
        for name in sorted(files):
            path = Path(current) / name
            if path.is_file():
                print(path)

Подкаталоги-ссылки не обходятся, чтобы избежать циклов. Ссылка на обычный файл может попасть в вывод; исключите path.is_symlink(), если это нежелательно. Ошибка доступа не скрывается. Во время обхода файлы могут исчезать, поэтому для конкурентно изменяемой директории нужна оговорённая обработка таких случаев.

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

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

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

Подробнее