在 Python 中,有时候为了获取当前运行的脚本的同目录下的另外一个文件,会这么写:
# this is foo.py
import os
path = os.path.split(__file__)[0] + "/other.data"
print(path)
也可以用os.path.dirname
代替os.path.split
:
# this is foo.py
import os
path = os.path.dirname(__file__) + "/other.data"
print(path)
正常执行 foo.py :
./foo.py # 需要foo.py设置了可执行权限
python ./foo.py
都能正确输出结果:
./other.data
但如果下面这种方式运行:
python foo.py
程序输出了不符合预期的结果:
/other.data
这和 path.dirname 以及 path.split 的机制有关,它都以/
为分隔符,如果传入的路径是foo.py
这种不含/
分隔符的路径,会导致非预期结果。
一个解决办法是添加os.path.abspath
强制将foo.py
转为肯定包含根目录/
的绝对路径:
# this is foo.py
import os
path = os.path.dirname(os.path.abspath(__file__)) + "/other.data"
print(path)
Q. E. D.