Os.path.dirname(__ file__) возвращает пустое

Я хочу получить путь к текущему каталогу, в котором выполняется файл .py.

Например, простой файл D:\test.py с кодом:

import os

print os.getcwd()
print os.path.basename(__file__)
print os.path.abspath(__file__)
print os.path.dirname(__file__)

Странно, что вывод:

D:\
test.py
D:\test.py
EMPTY

Я ожидаю таких же результатов от getcwd() и path.dirname().

Учитывая os.path.abspath = os.path.dirname + os.path.basename, почему

os.path.dirname(__file__)

возвращается пустой?

Ответ 1

Потому что os.path.abspath = os.path.dirname + os.path.basename не выполняется. мы скорее имеем

os.path.dirname(filename) + os.path.basename(filename) == filename

Оба dirname() и basename() разделяют только переданное имя файла на компоненты, не принимая во внимание текущий каталог. Если вы хотите также рассмотреть текущий каталог, вы должны сделать это явно.

Чтобы получить имя dirname абсолютного пути, используйте

os.path.dirname(os.path.abspath(__file__))

Ответ 2

можно также использовать:

dirname(dirname(abspath(__file__)))

Ответ 3

print(os.path.join(os.path.dirname(__file__))) 

Вы также можете использовать этот способ

Ответ 4

os.path.split(os.path.realpath(__file__))[0]

os.path.realpath(__file__) возвращает abspath текущего script; os.path.split(abspath) [0] возвращает текущий каталог

Ответ 5

import os.path

dirname = os.path.dirname(__file__) or '.'

Ответ 6

имя ' файл ' не определено, это дает такую ошибку