Python соединяет текущий каталог и родительский каталог с помощью os.path.join

Я хочу присоединиться к текущему пути к каталогу и относительный путь к каталогу goal_dir где-то в дереве каталогов, поэтому я получаю абсолютный путь к goal_dir, Это моя попытка:

import os
goal_dir = os.path.join(os.getcwd(), "../../my_dir")

Теперь, если текущий каталог C:/here/I/am/присоединяется к ним как C:/here/I/am/../../my_dir, но я хочу C:/here/my_dir, Кажется, что os.path.join не такой умный.

Как я могу это сделать?

2 ответа

Решение

Вы можете использовать normpath, realpath или abspath:

import os
goal_dir = os.path.join(os.getcwd(), "../../my_dir")
print goal_dir  # prints C:/here/I/am/../../my_dir
print os.path.normpath(goal_dir)  # prints C:/here/my_dir
print os.path.realpath(goal_dir)  # prints C:/here/my_dir
print os.path.abspath(goal_dir)  # prints C:/here/my_dir

Рассмотреть возможность использования os.path.abspath это оценит абсолютный путь

или можно использовать os.path.normpath это вернет нормализованный путь (нормализация пути, устранение двойной косой черты и т. д.)

Нужно выбрать одну из этих функций в зависимости от условий

В случае abspath В вашем примере вы не можете использовать os.path.join

os.path.abspath("../../my_dir")

os.path.normpath следует использовать, если Вас интересует относительный путь.

>>> os.path.normpath("../my_dir/../my_dir")
'../my_dir'

Недавно я обнаружил pathlib.

from pathlib import Path
cwd = Path.cwd()
goal_dir = cwd.parent.parent / "my_dir"

Или, используя файл текущего скрипта:

cwd = Path(__file__).parent
goal_dir = cwd.parent.parent / "my_dir"

В обоих случаях абсолютный путь в упрощенном виде можно найти так:

goal_dir = goal_dir.resolve()
Другие вопросы по тегам