在 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.