Python解析交换机配置的数据

2024-09-30 04:28:30 发布

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

我有这样的数据:

data = [{'1234': [{u'gateway_ip': u'172.20.21.1',
                u'ipv6_block': None,
                u'private_block': u'172.20.21.0/24',
                u'segment_name': u'VLAN1',
                u'switch_ports': [{u'name': u'fa0/32',
                                   u'switch_name': u'switch1.local',
                                   u'switch_port_interface_type_name': u'eth'},
                                  {u'name': u'fa0/15',
                                   u'switch_name': u'switch2.local',
                                   u'switch_port_interface_type_name': u'eth'}],
                u'vlan_name': u'INSIDE',
                u'vlan_number': 2031},
               {u'gateway_ip': u'172.20.31.1',
                u'ipv6_block': None,
                u'private_block': u'172.20.31.0/24',
                u'segment_name': u'VLAN2',
                u'switch_ports': [{u'name': u'fa0/32',
                                   u'switch_name': u'switch1.local',
                                   u'switch_port_interface_type_name': u'eth'},
                                  {u'name': u'fa0/15',
                                   u'switch_name': u'switch2.local',
                                   u'switch_port_interface_type_name': u'eth'}],
                u'vlan_name': u'DMZ',
                u'vlan_number': 2037}]}]

我想解析这些数据得到如下结果:

[{1234:[{switch1.local:[{fa0/32:[2031,2037],{fa0/15:[2031,2037]}}]},{switch2.local:[{fa0/32:[2031,2037],{fa0/15:[2031,2037]}}]}]}]

基本上,我想得到分配给特定交换机端口和设备的VLAN列表

[{device:[{switch1:{port1:[vlans-list]}},{switch1:{port2:[vlans-list]}}]}] 

当我用append-on-list做这件事时,我现在知道的是不正确的,我得到的结果是这样的:

[{device:[{switch1:{port1:[vlan1]}},{device:[{switch1:{port2:[vlan2]}]}}]}]

我相信这对你来说一开始是没有意义的,所以请提出问题,我会尽我所能回答他们。你知道吗


Tags: 数据nameportdevicelocaltypeblockinterface
2条回答

新的代码,其他没有工作正是我所期待的

def f_create_port_data(a_swichport_data):
    v_port_data=[{}]
    v_switch_ports=[]
    for l_device_port_list in a_swichport_data:
        v_device_port_data=[]
        for device,key in l_device_port_list.iteritems():
            for vlan in l_device_port_list[device]:
                for port in l_device_port_list[device][0]['switch_ports']:
                    v_switch_ports.append(port['switch_name']+"="+port['name'])
            v_switch_ports_list=list(set(v_switch_ports))
            for l_port in v_switch_ports_list:
                v_vlan_list=[]
                v_location=l_port.split('=')
                for l_vlan in l_device_port_list[device]:
                    for l_switchport in l_vlan['switch_ports']:
                        if (v_location[0]==l_switchport['switch_name'] and v_location[1]==l_switchport['name']):
                            v_vlan_list.append(l_vlan['vlan_number'])
                if (not v_port_data[0].has_key(device)):
                    v_port_data[0][device]=list()
                    v_port_data[0][device].append(dict())
                if (not v_port_data[0][device][0].has_key(v_location[0])):
                    v_port_data[0][device][0][v_location[0]]=list()
                    v_port_data[0][device][0][v_location[0]].append(dict())
                if (not v_port_data[0][device][0][v_location[0]][0].has_key(v_location[1])):
                    v_port_data[0][device][0][v_location[0]][0][v_location[1]]=v_vlan_list


    return v_port_data

返回的结果并不完全是您所建议的,但是,这样就减少了冗余数据。你知道吗

dict_out = {'vlan_number': {}}

for i in data:
    for k, v in i.items():
        dict_out[k] = [{sp['switch_name']: sp['name'] for sp in i['switch_ports']}
                       for i in v]
        dict_out['vlan_number'][k] = [i['vlan_number'] for i in v]

退货:

{'vlan_number': {'1234': [2031, 2037]}, '1234': [{'switch1.local': 'fa0/32', 'switch2.local': 'fa0/15'}, {'switch1.local': 'fa0/32', 'switch2.local': 'fa0/15'}]}

相关问题 更多 >

    热门问题