[英]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.