如何使用Python从yml配置文件中提取全部IP及Mac地址
问题描述
我有如下结构的yml文件,需要从中提取所有层级key对应的ip和mac_adr字段值:
EthernetClient: Windows: ip: 192.168.1.152 mac_adr: 'X4:81:C7:BD:46:04' Windows_Extnd: ip: 192.168.1.151 mac_adr: 'X4:81:C7:BD:47:04' WifiClient: Windows: ip: 192.168.1.154 mac_adr: 'X4:81:C7:BD:47:05' MAC: ip: 192.168.1.3 mac_adr: 'X4:81:C7:BD:47:06' IOS: ip: 192.168.1.4 mac_adr: 'X4:81:C7:BD:47:07'
目前我已经实现了基础的yml文件读取,代码如下:
import yaml a_yaml_file = open("../Test/example.yml") parsed_yaml_file = yaml.load(a_yaml_file, Loader=yaml.FullLoader) print(parsed_yaml_file["EthernetClient"]) print(parsed_yaml_file.get("WifiClient"))
请问我该如何编写代码实现提取所有ip和mac_adr的需求?
解决方法
你的yml是两层嵌套结构,第一层是网络客户端类型,第二层是设备系统类型,每一个二级节点下都存储了ip和mac_adr字段,直接嵌套遍历即可:
import yaml # 推荐用with上下文管理器读取文件,会自动释放文件句柄 with open("../Test/example.yml", "r", encoding="utf-8") as f: parsed_yaml = yaml.load(f, Loader=yaml.FullLoader) # 定义列表存储结果,保留层级对应关系 result = [] # 遍历第一层节点:EthernetClient、WifiClient for net_type, device_dict in parsed_yaml.items(): # 遍历第二层节点:Windows、MAC、IOS等 for device_type, info in device_dict.items(): ip = info.get("ip") mac_adr = info.get("mac_adr") result.append({ "网络类型": net_type, "设备类型": device_type, "ip": ip, "mac_adr": mac_adr }) # 打印所有结果 for item in result: print(item)
如果不需要保留层级key,只需要提取所有ip和mac的集合,可直接用如下代码:
ips = [] macs = [] for device_dict in parsed_yaml.values(): for info in device_dict.values(): ips.append(info.get("ip")) macs.append(info.get("mac_adr")) print("所有ip:", ips) print("所有mac地址:", macs)
内容的提问来源于stack exchange,提问作者Mahendra Vengalam
相关产品推荐
相关产品推荐

