os.path.abspath vs os.path.dirname

时间:2017-10-18 19:01:25

标签: python python-3.x os.path

这些在字符串值上是相同的,但它们真的相同吗?发生了什么事?

import os

path_name1 = os.path.abspath(os.path.dirname(__file__))
path_name2 = os.path.dirname(os.path.abspath(__file__))

print(path_name1)
print(path_name2)

1 个答案:

答案 0 :(得分:2)

根据here__file__的值是一个字符串,它是在加载程序导入模块时设置的。从here,您可以看到__file__的值为

  

存储模块数据的路径(未设置为内置模块)。

通常,路径已经是模块的绝对路径。因此,代码的第4行可以简化为path_name2 = os.path.dirname(__file__)。显然,代码的第3行可以显示为path_name1 = os.path.abspath(path_name2)(让我们暂时忽略执行的顺序)。

接下来要看看dirname做了什么。实际上,您可以将dirname视为os.path.split的包装,它将路径分为两部分:(head, tail)tail是给定路径的最后一部分,head是给定路径的其余部分。因此,path_name2只是包含加载文件的目录的路径。而且,path_name2是绝对路径。因此,os.path.abspath(path_name2)path_name2相同。因此,path_name1path_name2相同。