-1
if __name__ == "__main__":
    path_one = "/hello/world"
    path_two = "/my/little/friend"
    path_tree = 3

    print os.path.join(path_one, path_two, str(path_tree))
    # /my/little/friend\3 , but i want get this /hello/world/my/little/friend/3
    print os.path.join(path_two, str(path_tree))
    # /my/little/friend\3 , but i want get this /my/little/friend/3

    # ok, go

    print os.path.join(os.path.abspath(path_one), os.path.abspath(path_two), str(path_tree))
    # C:\my\little\friend\3 , but i want get C:\hello\world\my\little\friend\3
    print os.path.join(os.path.abspath(path_two), str(path_tree))
    # C:\my\little\friend\3 , all right!
    print os.path.join(os.path.abspath(path_two), str(path_tree), '/', '232\\')
    # /232\ , but i want C:\my\little\friend\3\232\ 

平时不带手鼓跳舞怎么能加入小道呢?

4

2 回答 2

2

os.path.join()函数文档特别指出绝对路径会导致前面的路径被丢弃:

如果任何组件是绝对路径,则所有先前的组件(在 Windows 上,包括先前的驱动器号,如果有的话)都将被丢弃,并继续加入。

您正在加入多个以 . 开头的路径/。从除第一个路径元素之外的任何内容中删除初始路径分隔符:

>>> import os.path
>>> os.path.join('/foo/bar', '/spam/eggs')
'/spam/eggs'
>>> os.path.join('/foo/bar', 'spam/eggs')
'/foo/bar/spam/eggs'
于 2013-11-04T17:51:15.620 回答
1

您正在加入两个绝对路径(从文件系统的根目录开始的路径,即以 开头/)。当你这样做时,第二个优先;怎么可能不呢?解决方案:不要那样做。

于 2013-11-04T17:51:21.797 回答