Подтвердить что ты не робот

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 не тот умный.

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

4b9b3361

Ответ 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 - общие манипуляции с путями