2

我想比较两个 Ansys 机械模型并总结差异。在某些情况下,只需将两个 ds.dat 文件与例如 Notepad++ 进行比较就足够了。但是不同的网格使这种比较很快变得混乱。

我的想法是将两个模型的树从 ExtAPI.DataModel.Project.Model两个字典导出,然后比较它们。但是我很难保持结构。当我尝试遍历所有受此链接启发的孩子时

#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
    } ... }

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

4

1 回答 1

1

将其移动到字典理解中:

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()如果您希望将其格式化以进行演示,则可以使用。

于 2022-01-17T15:31:37.790 回答