Python的层次结构遍历和比较模块?

Sov*_*iut 5 python tree module traversal hierarchy

我在日常开发中处理了很多层次结构.文件系统,Autodesk Maya中的嵌套DAG节点等.

我想知道,有没有专门用于遍历和比较对象层次结构的Python的优秀模块?

特别感兴趣的是在两个几乎相同的层次结构之间进行"模糊"比较的方法.执行此操作的一些原因是为了将Maya中的两个节点层次结构与两个不同的字符进行匹配,以便将动画从一个转移到另一个.

根据我一直在阅读的内容,我可能需要一些名称阈值(我可以自己构建)来比较两个节点名称彼此之间的距离.然后,我需要一种方法来选择性地忽略子节点在层次结构中出现的顺序.最后,我需要处理深度阈值,以防节点可能在层次结构中稍微向上或向下移动.

S.L*_*ott 4

我不确定我是否需要一个完整的模块——层次结构是一种设计模式,每个层次结构都有足够的独特功能,很难概括。

class Node( object ):
    def __init__( self, myData, children=None )
        self.myData= myData
        self.children= children if children is not None else []
    def visit( self, aVisitor ):
        aVisitor.at( self )
        aVisitor.down()
        for c in self.children:
            aVisitor.at( c )
        aVisitor.up()

class Visitor( object ):
    def __init__( self ):
        self.depth= 0
    def down( self ):
        self.depth += 1
    def up( self ):
        self.depth -= 1
Run Code Online (Sandbox Code Playgroud)

我发现这就是我所需要的。我发现很难从中创建一个可重用的模块,因为(a)这里的模块太少了,(b)每个应用程序都添加或更改了太多的代码。

此外,我发现最常用的层次结构是文件系统,我有一个os模块。第二个最常用的层次结构是 XML 消息,我有 ElementTree(通常通过 lxml)。在这两个之后,我使用上述结构作为我的类的模板,而不是作为字面可重用模块。