все Python 3osфункция
os.path.realpath
os.path — абсолютизация
Возвращает канонический путь, разрешая все символические ссылки по дороге.
Синтаксис
os.path.realpath(path)
Для несуществующего пути ошибки не будет: функция разрешит то, что есть, а остаток присоединит как есть. Чтобы получить FileNotFoundError, передайте strict=True (с Python 3.10). Это правильный шаг перед проверкой «файл внутри разрешённого каталога»: сначала realpath, потом commonpath, — иначе обход через символическую ссылку пройдёт незамеченным.
Примеры
# Python 3.9+
import os
print(os.path.isabs(os.path.realpath('.'))) # → True
lib = os.path.dirname(os.__file__)
print(os.path.realpath(os.path.join(lib, 'json', '..', 'os.py')) == os.path.realpath(os.__file__)) # → True (лишние шаги и '..' схлопываются)
print(os.path.abspath('.') == os.path.realpath('.')) # → True (в обычном каталоге; False, если путь ведёт через символическую ссылку — abspath ссылки не разрешает)
try:
os.path.realpath('нет-такого-файла', strict=True)
except FileNotFoundError as e:
print(type(e).__name__) # → FileNotFoundError (при strict=True путь обязан существовать)
См. также
Открыть в полном глоссарииdocs.python.orgСообщить о неточности