os.path.join在某些情况下给出错误的输出

时间:2019-03-19 06:03:25

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

我想使用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”末尾的斜杠(/)有关,这是导致此错误输出的原因。

2 个答案:

答案 0 :(得分:1)

来自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'

答案 1 :(得分:0)

此行为是exactly as documented

  

如果组件是绝对路径,则会抛出所有先前的组件   离开,连接从绝对路径组件继续。