【问题标题】:What does the os.path.join in python 2.7 do?python 2.7 中的 os.path.join 有什么作用?
【发布时间】:2019-01-01 12:10:52
【问题描述】:

我有以下我认为不正确的代码行:

path_dir = os.path.abspath(os.path.join(os.path.dirname(__file__)))

os.path.dirname(__file__) 在哪里寻找脚本。

我了解os.path.abspath() 为您提供文件或目录的绝对路径,但os.path.join() 将两个字符串组合在一起,但为此我们需要有 2 个路径。即path_dir = os.path.abspath(os.path.join(os.path.dirname(__file__), os.path.pardir)))

我认为上面的代码不正确和损坏是否正确?

【问题讨论】:

    标签: python python-2.7 os.path


    【解决方案1】:

    os.path.join() 调用完全是多余的,可以安全地删除。你在这里不需要它。但是,技术上并没有错误或损坏

    os.path.join() 接受任意数量的参数(至少 1 个)来连接在一起,因此虽然在技术上允许传入 os.path.dirname(__file__) 的结果,但 os.path.join() 只能返回那个单一的输入。

    这可能是代码重构或半理解的复制粘贴操作的产物,此后更多参数已被删除。

    os.path.join() 在您使用 *args 语法传递额外路径的情况下接受单个参数,但根据运行时条件,这些额外路径为空:

    base = '....'
    additional = ()
    if some_condition:
        additional = ('additional', 'elements')
    path = os.path.join(base, *additional)
    

    【讨论】:

      【解决方案2】:

      os.path.join(path, *paths) 加入一个或多个路径组件 聪明地。返回值是 path 和 any *paths 的成员只有一个目录分隔符 (os.sep) 在除最后一个以外的每个非空部分之后,这意味着结果 如果最后一部分为空,则只会以分隔符结尾。如果一个组件 是一个绝对路径,所有之前的组件都被丢弃并且 从绝对路径组件继续加入。

      Python 2.7 documentation

      【讨论】:

        猜你喜欢
        • 2014-01-27
        • 1970-01-01
        • 2016-03-03
        • 1970-01-01
        • 2017-09-14
        • 2013-01-27
        • 1970-01-01
        • 2013-06-13
        • 2010-12-29
        相关资源
        最近更新 更多