Используйте 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(), если это нежелательно. Ошибка доступа не скрывается. Во время обхода файлы могут исчезать, поэтому для конкурентно изменяемой директории нужна оговорённая обработка таких случаев.