You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 10:36:04