提问人:Darren Weber 提问时间:1/24/2019 更新时间:6/27/2019 访问量:3806
如何检查两个python pathlib。路径有相同的父母吗?
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
答:
4赞
Ant
6/27/2019
#1
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)
评论
parent
==parent
作品, FWIW