比较两个 Ansys Mechanical 模型树

Comparing two Ansys Mechanical Model Trees

我想比较两个 Ansys Mechanical 模型并总结差异。在某些情况下,只需将两个 ds.dat 文件与例如记事本++。但是不同的网格使这种比较很快变得混乱。

我的想法是将两个模型的树从 ExtAPI.DataModel.Project.Model 到两个词典,然后比较它们。但是我很难保持结构。 当我尝试遍历所有受 this link

启发的 Children 时
#recursive function to iterate a nested dictionary       
def iterate(dictionary, indent=4):
    print '{'
    for child in dictionary.Children:
        #recurse if the value is a dictionary
        if len(child.Children) != 0:
            print ' '*indent + child.Name + ": " ,
            iterate(child, indent+4)
        else:
            print ' '*indent+ child.Name
            
    print ' '*(indent-4)+ '}'

我得到可用格式的结构:

iterate(Model) 
{
    Geometry:  {
        Part:  {
            Body1
        }
    ...
    }

    Materials:  {
        Structural Steel
    }
    Cross Sections:  {
        Extracted Profile1
    }
    Coordinate Systems:  {
        Global Coordinate System
    } ... }

但现在我正在努力替换递归函数中的打印语句并保留模型树中的结构。

将其移入字典理解:

def iterate(dictionary):
    return {
        child.Name: (iterate(child) if child.Children else None)
        for child in dictionary.Children
    }

输出将是:

{
    "Geometry":  {
        "Part":  {
            "Body1": None
        },
    ...
    },

    "Materials":  {
        "Structural Steel": None,
    }
    "Cross Sections":  {
        "Extracted Profile1": None,
    }
    "Coordinate Systems":  {
        "Global Coordinate System": None
    } ... }

如果您希望将其格式化以方便演示,您可以使用 pprint.pprint()