如何组合多个路径库对象?

问题描述 投票:0回答:4

我使用 Python 的 pathlib 库获得了两个 Path 对象,

pathA = Path('/source/parent')
pathB = Path('/child/grandchild')
。将两者结合起来以获得
Path('/source/parent/child/grandchild')
对象的最直接方法是什么?

python-3.x path pathlib
4个回答
2
投票

根据文档

您可以通过

pathlib.PurePath(*pathsegments)

轻松做到这一点

“pathsegments 的每个元素可以是表示一个字符串 路径段,一个实现 os.PathLike 接口的对象 返回一个字符串,或另一个路径对象。”

>>> PurePath('foo', 'some/path', 'bar')
PurePosixPath('foo/some/path/bar')
>>> PurePath(Path('foo'), Path('bar'))
PurePosixPath('foo/bar')

所以对你来说是:

pathA = pathlib.Path('source/parent')
pathB = pathlib.Path('child/grandchild')
pathAB = pathlib.PurePath(pathA, pathB)

Output: source/parent/child/grandchild

注意

“当给出多个绝对路径时,最后一个作为锚点 (模仿 os.path.join() 的行为):“

>>> PurePath('/etc', '/usr', 'lib64')
PurePosixPath('/usr/lib64')
>>> PureWindowsPath('c:/Windows', 'd:bar')
PureWindowsPath('d:bar')

即使您这样做:

pathA = pathlib.Path('/source/parent')
pathB = pathlib.Path('/child/grandchild')
pathAB = pathlib.PurePath(pathA, pathB)

Pathlib 将像处理由字符串表示的路径对象一样处理 pathB。

Output: source/child/grandchild

1
投票
pathA = Path('/source/parent')
pathB = Path('child/grandchild') * remove the first front slash
print(pathA / pathB)

0
投票

这对我在 Win 11 上使用 python 3.11.3 有用。

>>> from pathlib import Path, PurePath
>>> patha = Path("C:/bob/zaa/mountain/Exports")
>>> fpath = PurePath(patha,Path("files/bobsfile.jpg"))
>>> fpath
PureWindowsPath('C:/bob/zaa/mountain/Exports/files/bobsfile.jpg')
>>> print(fpath)
C:\bob\zaa\mountain\Exports\files\bobsfile.jpg

好的...明白了。出现的第二个参数中不能有前导斜杠。


0
投票

在Python的

pathlib
库中,您可以使用
/
运算符来连接路径。要组合两条路径
patha
pathb
,您可以简单地使用
/
运算符,如下所示:


from pathlib import Path

patha = Path('/source/parent')
pathb = Path('child/grandchild')

combined_path = patha / pathb

执行串联后,

combined_path
变量将保存生成的路径对象
Path('/source/parent/child/grandchild')

© www.soinside.com 2019 - 2024. All rights reserved.