Как получить все Ip и Mac-адреса из файла yml в python?

#python #automated-tests #yaml

Вопрос:

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

Ответ №1:

С вашим файлом возникли некоторые проблемы .yml

  • В вашей последней строке есть интервал mac_adr: 'X4:81:C7:BD:47:07’
  • Вы начали с ' , но закончили с `

тест.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']
 

Комментарии:

1. Спасибо за ответ. Пожалуйста, предложите использовать только ip и mac_adr для печати с помощью цикла for. Это помогает мне проверить ip-адрес и mac-адрес в пользовательском интерфейсе

2. @MahendraVengalam Обновил сообщение в соответствии с просьбой, дайте мне знать, если это вам поможет 🙂

3. Спасибо, это было полезно для меня и работало нормально. Большое спасибо.

4. @MahendraVengalam Пожалуйста, не забудьте поставить зеленую галочку, чтобы принять мой ответ, счастливого кодирования!