【问题标题】:How do you combine more than one pathlib object?如何组合多个 pathlib 对象?
【发布时间】:2020-08-02 15:34:05
【问题描述】:

我有两个使用 Python 的 pathlib 库的 Path 对象,pathA = Path('/source/parent')pathB = Path('/child/grandchild')。将两者结合起来以获得Path('/source/parent/child/grandchild') 对象的最直接方法是什么?

【问题讨论】:

  • 取最深的路径使用path.parent()
  • 你是什么意思? path.parent 只返回给定路径对象中较高的文件夹
  • 对不起,我首先误会了你。请参阅下面的答案。

标签: python-3.x path pathlib


【解决方案1】:

根据docs

你可以通过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

【讨论】:

  • 好的,我知道为什么它不适合我了。因此,使用文档组合路径方式的正确格式不允许在pathB 的开头使用'/'。这意味着Path(Path('foo'), Path('bar')) 可以工作,但Path(Path('foo'), Path('/bar')) 不行
  • 事实上,Path(Path('foo'), Path('/bar')) 只返回Path('/bar')
  • 它说“当给出几个绝对路径时,最后一个被作为锚点(模仿 os.path.join() 的行为):”
  • 哦,是的!谢谢:-)
猜你喜欢
  • 1970-01-01
  • 2022-06-10
  • 1970-01-01
  • 2017-11-10
  • 1970-01-01
  • 2015-07-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多