os.path.dirname(__ file__)返回空


164

我想要获取执行.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__)

返回空?

Answers:


255

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

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

双方dirname()basename()只拆分通过文件名成组件,而不考虑当前目录。如果您还想考虑当前目录,则必须明确地考虑。

要获取绝对路径的目录名,请使用

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

3
嗨,Sven,您说对了,应该是os.path.dirname(os.path.abspath(file))。谢谢!仅供参考,您会在最后一行看到一个小的错字。
片状

11
请注意,由于markdown格式,上述注释的粗体字应在两边都有下划线。原始答案已正确更改
沃森尼克

1
请注意,我们从来没有os.path.dirname(filename) + os.path.basename(filename) == filename因为目录分隔符缺失。我们宁愿拥有:os.path.join(os.path.dirname(filename), os.path.basename(filename)) == filename
让·保罗

我很困惑,您应该在程序中保留basedir = os.path.abspath(os.path.dirname(file))吗?还是要替换什么,或者在哪里替换路径,例如C:\ Users \ Test \ app.db?
0004

@ pes04 __file__会扩展为当前文件的名称,因此您可以使用此答案的代码的逐字副本。
斯文·马纳赫


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

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


6
import os.path

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

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

您也可以使用这种方式

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.