这些在字符串值上是相同的,但它们真的相同吗?发生了什么事?
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)
答案 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_name1
与path_name2
相同。