1

在阅读了 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.

4

2 回答 2

8

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

再读一遍,强调我的:

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

当它说以前的组件被“丢弃”时,意味着它们被忽略并且不包含在最终结果中。

于 2012-08-08T21:56:50.560 回答
3

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

于 2012-08-08T21:56:52.310 回答