关于python:os.path.dirname(__ file__)返回空

os.path.dirname(__file__) returns empty

我想获取当前目录的路径,在该目录下执行.py文件。

例如,带有代码的简单文件D:\test.py

1
2
3
4
5
6
import os

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

很奇怪,输出是:

1
2
3
4
D:\
test.py
D:\test.py
EMPTY

我期待着来自getcwd()path.dirname()的相同结果。

鉴于os.path.abspath = os.path.dirname + os.path.basename,为什么

1
os.path.dirname(__file__)

返回空?


因为os.path.abspath = os.path.dirname + os.path.basename不成立。我们宁愿

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

dirname()basename()都只将传递的文件名拆分为组件,而不考虑当前目录。如果还想考虑当前目录,则必须显式地考虑。

要获取绝对路径的dirname,请使用

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


也可以这样使用:

1
dirname(dirname(abspath(__file__)))


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

os.path.realpath(__file__)返回当前脚本的abspath;os.path.split(abspath)[0]返回当前目录


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

你也可以用这种方式


1
2
3
import os.path

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