在阅读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
。
答案 0 :(得分:7)
我是否正确阅读了该文档?
再次尝试阅读,强调我的:
智能地加入一个或多个路径组件。 如果任何组件是 绝对路径,所有以前的组件(在Windows上,包括 之前的驱动器号,如果有的话)被扔掉,并且 加入继续。返回值是path1的串联, 以及可选的path2等,只有一个目录分隔符 (os.sep)除了最后一个之外的每个非空部分。 (这意味着 空的最后一部分将导致以a结尾的路径 分隔符。)请注意,在Windows上,因为有一个当前目录 对于每个驱动器,os.path.join(" c:"," foo")表示相对路径 到驱动器C上的当前目录:(c:foo),而不是c:\ foo。
当它说以前的组件被扔掉时#34;意味着它们被忽略,不包括在最终结果中。
答案 1 :(得分:2)
正如文档所说:如果任何组件是绝对的,那么以前的组件就会被丢弃。如果您的路径以/
开头,那么它是绝对的。如果它不应该是绝对的,那么它不应该以{{1}}开头。