如何检查两个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