如何检查两个python pathlib。路径有相同的父母吗?

How to check that two python pathlib.Path have the same parents?

提问人:Darren Weber 提问时间:1/24/2019 更新时间:6/27/2019 访问量:3806

问:

对于共享相同父路径的两个对象,如何比较它们以断言它们实际上共享相同的父路径?Path

>>> list(Path(input).parents)
[PosixPath('/usr/src/app'), PosixPath('/usr/src'), PosixPath('/usr'), PosixPath('/')]
>>> list(Path(output).parents)
[PosixPath('/usr/src/app'), PosixPath('/usr/src'), PosixPath('/usr'), PosixPath('/')]
>>> Path(input).parents == Path(output).parents
False

# huh?

虽然以下工作有效,但将其转换为:List

>>> list(Path(input).parents) == list(Path(output).parents)
True
python 路径 比较 相等性

评论

1赞 Travis Griggs 1/24/2019
parent == parent作品, FWIW

答:

4赞 Ant 6/27/2019 #1

Path.parents实际上返回一个帮助程序对象,该对象允许对路径元素(类型)进行索引访问和有效迭代。因此,您的比较失败,因为它尝试比较这两个帮助程序对象而不是它们的内容。pathlib._PathParents

从这个意义上说,这些文档有些误导:

Path.parents:一个不可变的序列,提供对路径逻辑祖先的访问

...要实际回答这个问题,您可以选择:

正如评论中指出的,您可以简单地比较父母:

Path(input).parent == Path(output).parent

这在许多情况下都有效,但如果路径的形式不同,即当出现在路径中或符号链接存在时,则匹配。..

该方法提供了一种避免这些问题的好方法,但请注意,由于计算忽略,使用仍然可能是一个问题。Path(...).samefile(...)Path(...).parent.samefile(...)parent..

使用表格是我发现的避免所有这些问题的最全面的方法。Path(...).resolve().parent.samefile(...)

对于这个特定问题,它看起来像:

Path(input).resolve().parent.samefile(Path(output).resolve().parent)