Sov*_*iut 5 python tree module traversal hierarchy
我在日常开发中处理了很多层次结构.文件系统,Autodesk Maya中的嵌套DAG节点等.
我想知道,有没有专门用于遍历和比较对象层次结构的Python的优秀模块?
特别感兴趣的是在两个几乎相同的层次结构之间进行"模糊"比较的方法.执行此操作的一些原因是为了将Maya中的两个节点层次结构与两个不同的字符进行匹配,以便将动画从一个转移到另一个.
根据我一直在阅读的内容,我可能需要一些名称阈值(我可以自己构建)来比较两个节点名称彼此之间的距离.然后,我需要一种方法来选择性地忽略子节点在层次结构中出现的顺序.最后,我需要处理深度阈值,以防节点可能在层次结构中稍微向上或向下移动.
我不确定我是否需要一个完整的模块——层次结构是一种设计模式,每个层次结构都有足够的独特功能,很难概括。
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)。在这两个之后,我使用上述结构作为我的类的模板,而不是作为字面可重用模块。