繁体   English   中英

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

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

对于具有相同父路径的两个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(...)方法提供了一种避免这些问题的好方法,但请注意,由于使用Path(...).parent.samefile(...)仍然会出现问题到parent计算忽略..

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM