如何检查两个python pathlib.Path是否具有相同的父级?

如何检查两个python pathlib.Path是否具有相同的父级?,python,path,compare,parent,equality,Python,Path,Compare,Parent,Equality,对于共享相同父路径的两个Path对象,如何比较它们以断言它们实际上共享相同的父路径 >列表(路径(输入).parents) [PosixPath('/usr/src/app')、PosixPath('/usr/src')、PosixPath('/usr')、PosixPath('/')] >>>列表(路径(输出).parents) [PosixPath('/usr/src/app')、PosixPath('/usr/src')、PosixPath('/usr')、PosixPath('/')]

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

>列表(路径(输入).parents)
[PosixPath('/usr/src/app')、PosixPath('/usr/src')、PosixPath('/usr')、PosixPath('/')]
>>>列表(路径(输出).parents)
[PosixPath('/usr/src/app')、PosixPath('/usr/src')、PosixPath('/usr')、PosixPath('/')]
>>>路径(输入).parents==路径(输出).parents
假的
#嗯?
尽管以下方法有效,但将其放入
列表似乎有些尴尬:

>>列表(路径(输入).parents)=列表(路径(输出).parents)
真的

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

这些文件在这个意义上有些误导:

parents:提供对路径的逻辑祖先的访问的不可变序列

…要真正回答这个问题,您可以选择:

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

路径(输入).parent==路径(输出).parent
这在许多情况下都有效,但如果路径的形式不同,即路径中出现
或符号链接,则将不匹配

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

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

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

Path(输入).resolve().parent.samefile(路径(输出).resolve().parent)

parent
=
parent
有效,fwiw