os.path.abspath vs os.path.dirname
这些在字符串值中是相等的,但它们真的相等吗?究竟在哪里?os.path.abspath vs os.path.dirname
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)
根据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
相同。
好吧,这是有道理的,但是如何将第4行简化为path_name2 = os.path.dirname(__ file__)。这似乎只返回一个
如果你把代码放在一个文件中,比如说“test.py”,并用命令“python3 test.py”执行它,你会发现“os.path.dirname(__ file__)”的输出是空的。但是,如果您打开python解释器并使用“导入测试”,则会发现输出不是空白。 –
相关:https://stackoverflow.com/q/3718657/674039 – wim