我想使用os.path.join()函数合并两个路径。我要合并的路径是-'/Users/Tushar/Desktop/'
和'/Exp'
。
我在做- os.path.join('/Users/Tushar/Desktop','/Exp')
和
预期输出为-'/Users/Tushar/Desktop/Exp'
但是我实际上得到了-'/Exp'
为什么我得到这个输出?
在所有系统,macOS,Windows,Linux上都发生这种输出
我已经尝试过-
os.path.join('/Users/Tushar/Desktop','Exp')
,我得到了正确的输出,即'/Users/Tushar/Desktop/Exp'
os.path.join('/Users/Tushar/Desktop/','Exp')
,我又得到了正确的输出,即'/Users/Tushar/Desktop/Exp'
os.path.join('/Users/Tushar/Desktop','/Exp','/123')
给出了'/123'
,但我希望'/Users/Tushar/Desktop/Exp/123'
显然, os.path.join('/Users/Tushar/Desktop/,'\\Exp')
给出正确的输出,即'/Users/Tushar/Desktop/\\Exp'
,其中os.path.join('/Users/Tushar/Desktop/','/Exp')
给出不正确的输出'/Exp'
。
到目前为止,我已经指出,它与“ / Exp”末尾的斜杠(/)有关,这是导致此错误输出的原因。
答案 0 :(得分:1)
如果组件是绝对路径,则所有先前的组件都将被丢弃,并且连接将从绝对路径组件继续。
您需要手动去除所有组件中除第一个以外的所有前导斜杠:
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)
如果组件是绝对路径,则会抛出所有先前的组件 离开,连接从绝对路径组件继续。