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__)) |
- 嗨,斯文,你说得对,应该是os.path.dirname(os.path.abspath(file))。谢谢!仅供参考,最后一行有一个小的打字错误。
- 注意,上面的注释有一个粗体,由于标记格式的原因,两边应该有下划线。原始答案已正确更改
- 请注意,由于缺少目录分隔符,所以我们从未使用过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 estapp.db?
- @pes04 __file__扩展到当前文件的名称,因此您可以使用此答案中代码的逐字副本。
也可以这样使用:
1
| dirname(dirname(abspath(__file__))) |
- @SvenMarnach的回答很有效,但这让人感觉更干净。
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 '.' |