Python,这两种获取路径的方法有什么不同?

时间:2016-10-23 02:40:54

标签: python

path = os.path.join(os.path.dirname(os.path.abspath(__file__)), 'templates')
print(path)
>>> /Users/***/Desktop/***/templates
path = os.path.abspath('templates')
print(path)
>>> /Users/***/Desktop/***/templates

我对此感到困惑,有人可以解释一下吗?

2 个答案:

答案 0 :(得分:1)

要注意区别,您必须保存文件并从其他路径运行它:

$ cat > path.py << EOF
import os
path = os.path.join(os.path.dirname(os.path.abspath(__file__)), 'templates')
print(path)
path = os.path.abspath('templates')
print(path)
EOF

输出:

$ python path.py
/home/.../templates
/home/.../templates

但是如果你从另一条路径运行它:

$ cd another_path
~/another_path$ python ../path.py 
/home/.../templates
/home/.../another_path/templates

第一个示例返回相对于文件的路径,但第二个示例相对于当前工作目录(getcwd)。

答案 1 :(得分:0)

您的第一个示例从显式文件名(存储在__file__中的值)中获取路径,第二个示例在您执行Python的位置依赖更多隐式

当值一致时,这些方法似乎是可以互换的,在您的示例中似乎是这种情况,但如果有问题的文件位于应用程序体系结构的某个更深处,或者是应用程序外部的另一个模块的一部分,那么得到不同的东西。