如何检查两个python路径库.Path有相同的父母吗



对于共享相同父路径的两个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

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

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

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

。。。要真正回答这个问题,你可以选择:

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

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

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

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

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

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

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

相关内容

  • 没有找到相关文章