如何从python中的yml文件中获取所有Ip和Mac地址?

How to Get all Ip and Mac address from the yml file in python?

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 文件。我需要从中获取所有密钥的 ip 和 mac_adr。 我伸手去拿所有数据

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"))

你有一些问题.yml文件

  • 最后一行有空格mac_adr: 'X4:81:C7:BD:47:07’
  • 您以 ' 开头,但以 `
  • 结尾

test.yml

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'

ExecutionScript.py

import yaml

with open("test.yml", 'r') as f:
    valuesYaml = yaml.load(f, Loader=yaml.FullLoader)
    print(valuesYaml["EthernetClient"])
    print(valuesYaml.get("WifiClient"))

最后是获取值的方法


根据要求,以下是获取完整 IP 列表的方法

import yaml

with open("test.yml", 'r') as f:
    listOfIp = []
    valuesYaml = yaml.load(f, Loader=yaml.FullLoader)
    
    for clientType, clientValues in valuesYaml.items():
        for attr, value in clientValues.items():
            if 'ip' in value:
                listOfIp.append(value['ip'])

print(listOfIp) # ['192.168.1.152', '192.168.1.151', '192.168.1.154', '192.168.1.3', '192.168.1.4']