我试图解析来自路由器输出的数据,但是有时两个重复的值。因此,我需要检查三种可能性,一个MAC,两个MAC和没有MAC。
这就是我目前的情况:
else: #Starts the parse
parser5 = ttp(output5, template_05_ad)
parser5.parse()
#put result in JSON format
results_0 = parser5.result(format='json')[0]
#str to list **convert with json.loads
result_0 = json.loads(results_0)
#Places the results into variables
if 'mac' in result_0[0][0]:
mac_connected = str(result_0[0][0]['mac'])
elif 'mac' in result_0[0]:
mac_connected = str(result_0[0]['mac'])
else:
mac_connected = 'NULL'输出如下:
One MAC:
CE
Vlan Mac Address Type Interface CTag Vlan
---- ----------------- --------- ---------------- ---- ----
4065 E1:B4:19:64:1B:51 Dynamic 10/0/1@1/2/2 na na
Total MAC addresses for this criterion: 1
Two MAC:
CE
Vlan Mac Address Type Interface CTag Vlan
---- ----------------- --------- ---------------- ---- ----
4065 E1:B4:19:64:1B:51 Dynamic 10/0/1@1/2/2 na an
4065 E1:B4:19:64:1B:51 Dynamic 10/0/1@1/2/2 na na
Total MAC addresses for this criterion: 1
No MAC:
No MAC addresses found for this criterion当它被解析时,它将如下所示(来自result_0的打印输出):
One MAC::
[{'mac': 'E1:B4:19:64:1B:51'}]
Two MAC:
[[{'mac': 'E1:B4:19:64:1B:51'}, {'mac': 'E1:B4:19:64:1B:51'}]]
No MAC:
[{}]对不起,如果您之前已经回答了这个问题,我们将非常感谢您的帮助。
发布于 2022-08-12 11:30:08
如果我正确理解,您可以得到一个字典列表或一个json字典作为result_0[0]的值。
您可以先检查它是否是一个列表。因为您总是只对第一个mac值感兴趣,所以在这种情况下可以只使用第一个list元素。如果然后使用带有默认值的.get()方法,则不需要将空情况单独处理:
else: #Starts the parse
parser5 = ttp(output5, template_05_ad)
parser5.parse()
#put result in JSON format
results_0 = parser5.result(format='json')[0]
#str to list **convert with json.loads
result_0 = json.loads(results_0)
if isinstance(result_0[0], list):
result_0[0] = result_0[0][0]
#Places the results into variables
mac_connected = result_0[0].get('mac', 'NULL')(这假设在列表的情况下,最终想要的mac结果总是在result[0][0]中)
另一种选择可能是以某种方式调整您的TTP模板,以便它首先总是返回一个列表(即使其中只有一个元素)。
发布于 2022-08-12 11:16:14
我不确定您希望如何返回数据,但这可能会帮助您更接近解决方案?
def CheckMAC(mac):
connected_mac = ""
for value in mac:
if value:
if isinstance(value, dict):
return(value['mac'])
elif isinstance(value, list):
for nested_value in value:
connected_mac += f"{nested_value['mac']} "
return(connected_mac.strip())
else:
return("NULL")
oneMAC = [{'mac': 'E1:B4:19:64:1B:51'}]
twoMAC = [[{'mac': 'E1:B4:19:64:1B:51'}, {'mac': 'E1:B4:19:64:1B:51'}]]
noMAC = [{}]
print(CheckMAC(oneMAC))
print(CheckMAC(twoMAC))
print(CheckMAC(noMAC))结果:
E1:B4:19:64:1B:51
E1:B4:19:64:1B:51 E1:B4:19:64:1B:51
NULLhttps://stackoverflow.com/questions/73332855
复制相似问题