Pathlib и проверка файлового пути с '..'
@python_quizРазберем этот квиз
Коротко: в примере используется pathlib.Path с фрагментом пути '..'. В каталоге присутствует только файл data/app.log. Нам нужно понять, что выведет код при проверках p.exists() и p.is_file().

Разберёмся по шагам.
Что делает Path и как работают exists()/is_file()
- Объект Path хранит сегменты пути буквально: конструкция Path('data') / 'logs' / '..' / 'app.log' содержит компонент '..'.
- Операции exists() и is_file() при обращении к файловой системе учитывают семантику «..» — то есть файловая система интерпретирует путь, сворачивая переходы вверх по дереву, и итоговый доступ проверяет уже нормализованный путь.
- Таким образом, если итоговый (нормализованный) путь указывает на существующий файл, оба метода вернут True: exists() — путь существует, is_file() — это обычный файл.
Важно: Path.resolve() может показать нормализованный абсолютный путь. Чтобы не вызывать ошибки в старых версиях Python, можно использовать resolve(strict=False).
Демонстрация (ожидаемый вывод)
Пример с выводом промежуточных значений:

При условии, что на диске действительно есть файл data/app.log, вывод будет примерно:
- raw: data/logs/../app.log
- resolved: /полный/путь/до/data/app.log
- exists, is_file: True True
Анализ вариантов ответов
Рассмотрим логически каждый из предложенных вариантов вывода:
- "True True" — соответствует ситуации, когда нормализованный путь указывает на существующий файл. Это и происходит в условии (есть data/app.log).
- "False False" — означало бы, что итоговый путь не существует и не является файлом; не подходит, так как файл присутствует.
- "False True" — противоречивый вариант: как правило exists() возвращает True для обычного файла, и is_file() не станет True, если exists() False (исключение — редко какие-то странные файловые метаданные, но в обычной POSIX/Windows среде это невозможно).
- "True False" — могло бы возникнуть, если путь существует, но является, например, директорией; в нашем случае итоговый путь — обычный файл, значит этот вариант тоже не подходит.
Итог
При наличии на диске файла data/app.log вызовы p.exists() и p.is_file() вернут True True. Path сам по себе может хранить '..' в представлении, но проверки обращаются к реальному (нормализованному) пути в файловой системе.
Дополнительные замечания
- is_file() возвращает True для обычного файла (следует символическим ссылкам, указывающим на файл).
- exists() вернёт False для сломанной символической ссылки (symlink, указывающий на несуществующий объект).
- Если нужно увидеть нормализованный абсолютный путь без ошибки при отсутствии целевого файла, используйте p.resolve(
strict=False).