我正在处理奇怪的问题。考虑一下这个简单的代码:
print(__file__)
print("***" + os.path.dirname(__file__) + "###")
现在,当我在笔记本电脑上运行此代码时,我有Fedora 23操作系统,输出为:
/home/.../ExperimentalSystem/BullshitSetupGenerator.py
***/home/.../ExperimentalSystem###
在Ubuntu 15.10上运行相同的代码:
BullshitSetupGenerator_delete_me.py
***###
任何人都可以解释我为什么?我错过了什么吗?
答案 0 :(得分:3)
__file__
由给Python的参数定义,告诉它你的文件是什么。例如,假设您位于名为Here
的文件夹中。您可以说python ../Here/here.py
,__file__
将是../Here/here.py
。如果您仅使用python here.py
运行同一文件,则__file__
为here.py
。当您在同一目录中运行Python文件而不使用绝对路径或奇怪的相对路径时,该文件将没有提到任何目录。这意味着os.dirname(__file__)
将为空。如果需要,可以使用os.path.abspath()
获取绝对路径。
答案 1 :(得分:2)
您可能不希望纯粹依赖__file__
属性,但确保您拥有完整路径abspath
:
os.path.dirname(os.path.abspath(__file__))