pathlib路径中斜杠运算符和逗号分隔符的区别

Difference between slash operator and comma separator in pathlib Path

readpathlib 中我们可以通过在两个路径之间使用 / 创建一个子路径,逗号也可以。但是,我无法确定这两种情况之间是否存在差异。在以下示例中,输出是相同的:

from pathlib import Path

p = Path('/hello', 'world')
s = Path(p, 'how', 'are', 'you')
ns = Path(p / 'how', 'are', 'you')

print(s)
print(ns)

但考虑到 pathlib 是高度面向对象的,我想幕后可能有些不同。在 Path 中使用 / 与逗号相比有区别吗?

pathlib.Path 对象或 Path 对象与 str 对象之间使用 / 运算符的全部意义在于,您可以 避免 将所有内容包装在对 Path 的调用中。

>>> from pathlib import Path
>>> p = Path('/hello', 'world')
>>> p / 'how'
PosixPath('/hello/world/how')
>>> p / 'how' / 'are' / 'you'
PosixPath('/hello/world/how/are/you')

区别不在使用 "a comma" 和 / 之间,而是在使用 / 和构造函数 Path.

之间

我想,/ 应该类似于 joinpath:

>>> p.joinpath('how','are','you')
PosixPath('/hello/world/how/are/you')

但是在幕后某处您正在创建一个新的 Path 实例,所以 Path 无论如何都会被调用。

注,来自docs

When several absolute paths are given, the last is taken as an anchor (mimicking os.path.join()’s behaviour):

所以他们也有这种行为:

>>> '/etc' / p / '/usr'
PosixPath('/usr')
>>> Path('/etc', p, '/usr')
PosixPath('/usr')