【问题标题】:os.path.join gives incorrect output in certain casesos.path.join 在某些情况下给出不正确的输出
【发布时间】:2019-08-09 14:23:58
【问题描述】:

我想使用 os.path.join() 函数合并两条路径。我要合并的路径是 - '/Users/Tushar/Desktop/''/Exp'

我在做 - os.path.join('/Users/Tushar/Desktop','/Exp')

  • 预期输出为 - '/Users/Tushar/Desktop/Exp'

  • 但我实际上得到了 - '/Exp'

为什么我会得到这个输出?

这种输出出现在所有系统上,macOS、Windows、Linux

我试过了-

  1. os.path.join('/Users/Tushar/Desktop','Exp') 我得到了正确的输出,即'/Users/Tushar/Desktop/Exp'

  2. os.path.join('/Users/Tushar/Desktop/','Exp') 我又得到了正确的输出,即'/Users/Tushar/Desktop/Exp'

  3. os.path.join('/Users/Tushar/Desktop','/Exp','/123') 给了'/123',但我期待'/Users/Tushar/Desktop/Exp/123'

  4. 显然 os.path.join('/Users/Tushar/Desktop/,'\\Exp') 给出了正确的输出,即'/Users/Tushar/Desktop/\\Exp'os.path.join('/Users/Tushar/Desktop/','/Exp') 给出了不正确的输出'/Exp'

到目前为止,我已经明白它与 '/Exp' 末尾的 斜杠 (/) 有关,这是导致此错误输出的原因。 p>

【问题讨论】:

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


【解决方案1】:

这种行为是exactly as documented

如果组件是绝对路径,则抛出之前的所有组件 离开并从绝对路径组件继续加入。

【讨论】:

    【解决方案2】:

    来自Python documentation

    如果一个组件是绝对路径,所有之前的组件都被丢弃,并从绝对路径组件继续加入。

    您需要手动去除除第一个组件之外的所有组件中的所有前导斜杠:

    def my_join(root, *args):
        args = [arg.lstrip(os.path.sep) for arg in args]
        return os.path.join(root, *args)
    

    查看示例:

    >>> my_join('/home/ibug', '/oh', '/yeah', '/handsome')
    '/home/ibug/oh/yeah/handsome'
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-12-11
      • 2019-02-17
      • 1970-01-01
      • 2011-09-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多