用于将pyparsing结果与节点的linkedlist关联的模式

2024-04-27 13:06:04 发布

您现在位置:Python中文网/ 问答频道 /正文

我已经定义了一个pyparsing规则来将此文本解析为语法树。。。在

文本命令:

add Iteration name = "Cisco 10M/half"
    append Observation name = "packet loss 1"
        assign Observation results_text = 0.0
        assign Observation results_bool = True
        append DataPoint
            assign DataPoint metric = txpackets
            assign DataPoint units = packets
        append DataPoint
            assign DataPoint metric = txpackets
            assign DataPoint units = packets
    append Observation name = "packet loss 2"
        append DataPoint
            assign DataPoint metric = txpackets
            assign DataPoint units = packets
        append DataPoint
            assign DataPoint metric = txpackets
            assign DataPoint units = packets

语法树:

^{pr2}$

我试图将上面语法树中所有嵌套的键值对关联到一个对象的链接列表中。。。继承结构看起来像这样(每个单词都是一个namedtuple。。。继承人的子女在父母的子女名单上):

Log: [ 
    Iteration: [ 
        Observation: 
            [DataPoint, DataPoint], 
        Observation: 
            [DataPoint, DataPoint]
    ]
]

所有这一切的目标是建立一个通用的测试数据采集平台来驱动针对networkgear的测试流,并记录结果。当数据采用这种格式后,将使用相同的数据结构来构建测试报告。为了回答下面评论中的问题,我选择了一个链接列表,因为这似乎是编写报告时按顺序排列信息的最简单方法。然而,我宁愿在完成测试之前不指定Iteration或{}序列号。。。以防我们在测试过程中发现问题并插入更多观察结果。我的理论是,列表中每个元素的位置都足够了,但如果是问题的一部分,我愿意改变这一点。在

问题是,在链接列表建立后,我试图为链接列表中的对象分配键值,这让我迷路了。例如,在我将一个Observationnamedtuple插入第一个Iteration之后,在上面的示例中,我很难可靠地处理assign Observation results_bool = True的更新。在

有没有一种通用的设计模式来处理这种情况?我已经在google上搜索了一段时间,但是我似乎无法在解析文本(我可以做到)和管理数据层次结构(主要问题)之间建立联系。超链接或小的演示代码是好的。。。我只需要指点才能进入正确的轨道。在


Tags: name文本列表链接语法metricresultsunits
2条回答

最后我使用了textfsm,这允许我在分析配置文件时保持不同行之间的状态。在

我不知道你要找的是什么样的实际设计模式,但我对手头的问题有着极大的热情。我大量使用网络设备,解析和组织数据对我来说是一个巨大的挑战。在

很明显,问题不在于解析数据,而在于之后如何处理数据。在这里,您需要考虑附加到已解析数据的含义。如果包含列表的对象也有意义,则嵌套列表方法可能会很适合您。在

Namedtuples对于快速和脏类的行为非常有用,但是当您需要它们执行基本属性访问之外的任何操作时,它们就不会出现问题,特别是考虑到作为元组,它们是不可变的。在我看来,您可能希望用完整的类替换某些namedtuple对象。通过这种方式,您可以高度定制可用的行为和方法。在

例如,您知道Iteration将始终包含1个或多个Observation对象,这些对象将包含1个或多个DataPoint对象。如果你能准确地描述这些关系,这将使你走上处理它们的道路。在

相关问题 更多 >