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()