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
не тот умный.
Как я могу это сделать?
Ответы
Ответ 1
Вы можете использовать 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
Ответ 2
рассмотрим использование 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 - Объектно-ориентированные пути файловой системы
- os.path - общие манипуляции с путями