Не понимаю, как работает os.path.dirname()

#python #os.path #sys.path

#python #os.path #sys.path

Вопрос:

Я довольно новичок в мире Python и хотел бы знать, может ли кто-нибудь объяснить эту строку кода?

Я знаю, что он добавляет каталог целевого файла в sys.path, но не знаю, как это происходит.

 sys.path.append(os.path.dirname(os.path.dirname(__file__)))
 

Комментарии:

1. Вы уверены, что это не os.path.dirname(os.path.realpath(__file__) так?

2. На самом деле я не уверен, так как я не знаю, что делает эта строка кода. Приведенная выше строка также взята из другого ответа stackoverflow о sys.path.

Ответ №1:

Давайте начнем с объяснения некоторых вещей:

  • __file__ это встроенный Python. Он выдает абсолютный путь к текущему исполняемому скрипту.
  • os.path.dirname возвращает каталог с заданным именем пути, например, если ввести входные /a/b/c/d данные, это даст /a/b/c результат.
  • sys.path это список каталогов, которые Python будет использовать для поиска модулей при попытке импортировать что-либо.

os.path.dirname(__file__) возвращает родительский каталог текущего выполняемого скрипта (т.е. ../ )

os.path.dirname(os.path.dirname(__file__)) возвращает родительский каталог родительского каталога текущего выполняемого скрипта. (т.е. ../../ )

os.path.append(os.path.dirname(os.path.dirname(__file__))) зарегистрирует родительский каталог родительского каталога текущего исполняемого скрипта в качестве места для поиска новых модулей.


Итак, допустим, у нас есть следующая структура каталогов:

 a
|- b
|- c
|-----d
|     |----e
|     |    |---- f
|     |    |     |- main.py
|     |    |- bar.py
|     |- foo.py
|- foobar.py
 

Если предоставить скрипт, содержащий этот код main.py , то конечным результатом будет sys.path.append('/a/d/e') , так что вы сможете сделать import bar (но не import foo или import foobar )

Комментарии:

1. Спасибо! Действительно! С вашим объяснением о том, что такое os.path.dirname() и file на самом деле, теперь мне все ясно.