如何在python中的键/值对中查找和打印文本

时间:2019-05-24 08:03:51

标签: python key-value

我有一个脚本,可以对某些网络设备执行很多不同的测试。我只想从输出中打印失败的消息。键(显示bgp摘要)不是恒定的,可以变化。在“失败”部分和“通过”部分中可以有多个按摩字段。 我该怎么办?

pprint(checkvalue.test_results)

提供以下输出:

{'show bgp summary': [{'count': {'fail': 2, 'pass': 8},
                       'failed': [{'id': {'peer-address': '10.10.20.20'},
                                   'message': ' The BGP Neighbour 10.10.20.20 '
                                              "was in ['Established'], now "
                                              "it's ['Connect']",
                                   'post': {'peer-address': '10.10.20.20',
                                            'peer-state': ['Connect']},
                                   'post_node_value': ['Connect'],
                                   'pre': {'peer-state': ['Established']},
                                   'pre_node_value': ['Established']},
                                  {'id': {'peer-address': '10.10.10.10'},
                                   'message': ' The BGP Neighbour 10.10.10.10 '
                                              "was in ['Established'], now "
                                              "it's ['Connect']",
                                   'post': {'peer-address': '10.10.10.10',
                                            'peer-state': ['Connect']},
                                   'post_node_value': ['Connect'],
                                   'pre': {'peer-state': ['Established']},
                                   'pre_node_value': ['Established']}],
                       'node_name': 'peer-state',
                       'passed': [{'id': {'peer-address': '111.111.111.111'},
                                   'message': 'BGP State check',
                                   'post': {'peer-address': '111.111.111.111',
                                            'peer-state': ['Established']},
                                   'post_node_value': ['Established'],
                                   'pre': {'peer-state': ['Established']},
                                   'pre_node_value': ['Established']},
                                  {'id': {'peer-address': '0000:0000:0000:00:2'},
                                   'message': 'BGP State check',
                                   'post': {'peer-address': '0000:000:0000:00::2',
                                            'peer-state': ['Active']},
                                   'post_node_value': ['Active'],
                                   'pre': {'peer-state': ['Active']},
                                   'pre_node_value': ['Active']},
                       'result': False,
                       'test_name': 'BGP-peers-estab',
                       'testoperation': 'no-diff',
                       'xpath': 'bgp-peer'}]}

我只想打印测试失败的消息。像这样: 'BGP邻居10.10.10.10'“位于['已建立'],现在” “是['Connect']”

1 个答案:

答案 0 :(得分:0)

谢谢大家。你指出我正确的方向。我可以通过以下方式实现自己的目标:

for testname, value in checkvalue.test_results.items():
    for i in checkvalue.test_results[testname][0]['failed']:
        print(i['message'])