2012-08-08 65 views
1

在阅读os.path.join()方法的联机文档之后,以下情况似乎应该限定,但显然不适用。我是否正确阅读该文档?从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

回答

7

我正确地阅读该文档吗?

尝试再次读它,重点煤矿:

加入一个或多个路径组件智能化。 如果任何组件是一个 绝对路径,所有前面的组件,(在Windows上,包括前面 驱动器盘符,如果有一个)都扔掉,并 加盟继续。返回值是path1, 和可选的path2等的连接,在除了最后一个以外的每个非空部分之后,只有一个目录分隔符 (os.sep)。 (这意味着 空的最后部分将导致以 分隔符结尾的路径。)请注意,在Windows上,由于每个驱动器都有当前目录 ,因此os.path.join(“c:”,“” foo“)代表相对于驱动器C上的当前目录 的路径:(c:foo),而不是c:\ foo。

当它说前面的组件被“扔掉”意味着它们被忽略并且不包括在最终结果中。

+0

我明白了,谢谢。我认为以前的“组件”被抛出将是os.sep而不是整个路径。 – 2012-08-08 22:08:26

2

正如文档所述:如果任何组件是绝对的,则以前的组件将被丢弃。如果你的路径以/开头,那么它是绝对的。如果它不是绝对的,它不应该以/开头。