【问题标题】:os.path.abspath vs os.path.dirnameos.path.abspath vs os.path.dirname
【发布时间】:2017-10-18 19:01:24
【问题描述】:

它们在字符串值上是相等的,但它们真的相等吗?哪里发生了什么?

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)

【问题讨论】:

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


【解决方案1】:

根据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 是一样的。

【讨论】:

  • 好吧,这是有道理的,但是如何将第 4 行简化为 path_name2 = os.path.dirname(file)。这似乎只是返回一个 len 为 0 的 的空白输出。虽然感谢你的回答,我明白为什么 os.path.dirname(os.path.abspath)) 是这样的。
  • 如果你把代码放到一个文件中,比如“test.py”,然后用命令“python3 test.py”执行,你会发现“os.path.dirname( 文件)”为空白。但是,如果你打开一个python解释器,并使用“import test”,你会发现输出不是空白的。
猜你喜欢
  • 1970-01-01
  • 2016-11-19
  • 1970-01-01
  • 2014-01-27
  • 1970-01-01
  • 2014-09-02
  • 1970-01-01
  • 1970-01-01
  • 2023-03-18
相关资源
最近更新 更多