来自Python的os.path.join()的正确结果

时间:2012-08-08 21:55:15

标签: python

在阅读os.path.join()方法的在线文档后,以下情况似乎应该符合条件,但显然它没有。我是否正确阅读了该文件?

>>> import os
>>>
>>> os.path.join("/home/user", "/projects/pyproject", "mycode.py")
>>> '/projects/pyproject/mycode.py'

在第一个和第二个路径上尝试尾随和前导os.sep的不同组合后,似乎第二个连接路径的第一个字符不能以os.sep开头。

>>> os.path.join("/home/user", "projects/pyproject", "mycode.py")
>>> '/home/user/projects/pyproject/mycode.py'

在path1和path2是来自的部分的情况下,例如,用户输入意味着编写代码来解析它们对那个领先的os.sep的输入。

来自python.org在线参考:

  

os.path.join(path1[, path2[, ...]])加入一个或多个路径组件   智能。如果任何组件是绝对路径,则以前都是   组件(在Windows上,包括之前的驱动器号,如果有的话)   是一个被扔掉,加入继续。返回值是   完全符合path1和可选path2等的串联   每个非空部分之后的一个目录分隔符(os.sep)除外   最后。 (这意味着空的最后一个部分将导致路径   以分隔符结束。)请注意,在Windows上,因为有一个   每个驱动器的当前目录,os.path.join("c:", "foo")表示   相对于驱动器C:c:foo)上当前目录的路径,而不是   c:\foo

2 个答案:

答案 0 :(得分:7)

  

我是否正确阅读了该文档?

再次尝试阅读,强调我的:

  

智能地加入一个或多个路径组件。 如果任何组件是   绝对路径,所有以前的组件(在Windows上,包括   之前的驱动器号,如果有的话)被扔掉,并且   加入继续。返回值是path1的串联,   以及可选的path2等,只有一个目录分隔符   (os.sep)除了最后一个之外的每个非空部分。 (这意味着   空的最后一部分将导致以a结尾的路径   分隔符。)请注意,在Windows上,因为有一个当前目录   对于每个驱动器,os.path.join(" c:"," foo")表示相对路径   到驱动器C上的当前目录:(c:foo),而不是c:\ foo。

当它说以前的组件被扔掉时#34;意味着它们被忽略,不包括在最终结果中。

答案 1 :(得分:2)

正如文档所说:如果任何组件是绝对的,那么以前的组件就会被丢弃。如果您的路径以/开头,那么它是绝对的。如果它不应该是绝对的,那么它不应该以{{1​​}}开头。