python中的os.path.join返回'错误'路径?

时间:2013-08-08 12:13:36

标签: python os.path

我有来自ipython的以下python os.path输出

import os.path as path
path.join("/", "tmp")
Out[4]: '/tmp'
path.join("/", "/tmp")
Out[5]: '/tmp'
path.join("abc/", "/tmp")
Out[6]: '/tmp'
path.join("abc", "/tmp")
Out[7]: '/tmp'
path.join("/abc", "/tmp")
Out[8]: '/tmp'
path.join("def", "tmp")
Out[10]: 'def/tmp'

我发现输出5,6,7和8是违反直觉的。有人可以解释一下这个实施的具体原因吗?

2 个答案:

答案 0 :(得分:16)

来自os.path.join() documentation

  

智能地加入一个或多个路径组件。如果任何组件是绝对路径,则所有以前的组件(在Windows上,包括之前的驱动器号,如果有的话)都将被丢弃,并且继续加入。

一开始/会使/tmp成为绝对路径。

如果你想加入可能包含一个主要路径分隔符的多个路径元素,那么首先删除它们:

os.path.join(*(elem.lstrip(os.sep) for elem in elements))

特殊外壳绝对路径使您可以指定相对路径(来自默认父目录)绝对路径,而不必检测您是否具有绝对路径或相对路径在构建最终价值时。

答案 1 :(得分:3)

第二个字符串不应以/开头;这会创建一个绝对路径。做了以下工作:

>>> path.join('abc/', 'tmp')
'abc/tmp'

来自Python文档:

  

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