Сообщить об ошибке.

Функция realpath() модуля os.path в Python

Получить канонический путь к файлу по символической ссылке

Синтаксис:

import os.path
os.path.realpath(path, *, strict=False)

Параметры:

  • path - путь к файлу (строка или объект, реализующий os.PathLike)
  • strict - режим обработки ошибок:
    • False (по умолчанию): частичное разрешение пути
    • True: строгий режим с выбросом исключений
    • os.path.ALLOW_MISSING: игнорировать только отсутствующие файлы

Возвращаемое значение:

  • Строка с абсолютным каноническим путем

Описание os.path.realpath

В Python 3.14 Добавлено значение os.ALLOW_MISSING для параметра strict

Функция realpath() модуля os.path возвращает канонический путь указанного файла, устраняя все встреченные символические ссылки (если они поддерживаются операционной системой). На Windows также преобразует имена в стиле MS-DOS(8.3), например C:\\PROGRA~1 в C:\\Program Files.

Поведение по умолчанию (strict=False):

  • Путь обрабатывается до первого компонента, который:
    • Не существует
    • Является циклической ссылкой
    • Вызывает OSError при обработке
  • Все такие компоненты добавляются к результату без изменений
  • Обрабатываемые ошибки включают:
    • "Доступ запрещен"
    • "Не является директорией"
    • "Некорректный аргумент для внутренней функции"
  • Результирующий путь может:
    • Содержать отсутствующие или недоступные компоненты
    • Включать неразрешенные ссылки или циклы
    • Проходить через файлы (не директории)

Изменение поведения через параметры:

  1. strict=True:

    • Первая же ошибка при обработке пути вызывает исключение
    • FileNotFoundError - если путь не существует
    • OSError - если путь недоступен по другим причинам
  2. strict=os.path.ALLOW_MISSING:

    • Игнорирует только FileNotFoundError
    • Все другие ошибки вызывают исключение (как при strict=True)
    • Гарантирует отсутствие символических ссылок в результате
    • Конечный файл и некоторые родительские директории могут отсутствовать

Важные примечания:

  1. Функция эмулирует процедуру ОС для канонизации путей, с различиями между Windows и UNIX в обработке ссылок
  2. API операционной системы обычно сами канонизируют пути при необходимости, поэтому явный вызов этой функции часто избыточен

Примеры использования os.path.realpath:

Базовый случай:

path = "~/./docs/../file.txt"
print(os.path.realpath(path))  
# /home/user/file.txt (пример для Linux)

Обработка ошибок:

try:
    path = os.path.realpath("/nonexistent/path", strict=True)
except FileNotFoundError:
    print("Путь не существует!")

Режим ALLOW_MISSING:

path = os.path.realpath("/possibly/missing/path", strict=os.path.ALLOW_MISSING)

Windows особенности:

print(os.path.realpath("C:\\PROGRA~1"))  
# C:\Program Files
print(os.path.realpath("C:\\Documents and Settings\\"))  
# C:\Users (если это junction)

Python 3.6 Добавлена поддержка path-like объектов

Python 3.8 Добавлено разрешение символических ссылок и junction points на Windows

Python 3.10 Добавлен параметр strict

Python 3.14 Добавлено значение os.ALLOW_MISSING для параметра strict. Если оно используется, будут повторно возникать ошибки, отличные от FileNotFoundError. Результирующий путь может отсутствовать, но в нём не будет символических ссылок.

Дополнительные рекомендации:

  1. Для большинства случаев достаточно os.path.abspath()
  2. Для проверки существования пути используйте os.path.exists()
  3. Учитывайте накладные расходы - функция выполняет системные вызовы
  4. На Windows поведение может отличаться для symlinks vs junctions