Парсинг данных и yaml в python
Всем привет. Как я могу распарсить данный из yaml в функцию, чтоб передавать ключ и значение. суть в том, что на выходе мне нужно получить для бесконечно возможного количества новых service1...99 вывод вида : service1 google good http://google.com 1 1 app1, service2 google bad http://gooogle.com 2 2 app2 и так далее. это вообще возможно сделать и что я делаю не так? мой код работает не так и я не знаю куда копать
services:
service1:
name: google good
url: http://google.com
service: 1
time: 1
service2:
name: google bad
url: http://gooogle.com
service: 2
time: 2
service3:
name: google bad
url: http://googgle.com
service: 3
time: 3
в который я подставляю данные url, который хочу проверить на доступность кодом
def get_status_app():
with open('config.yaml', 'r') as f:
config = yaml.load_all(f, Loader=yaml.FullLoader)
config_services = config["url"]
print(config_services)
for urls in config_url :
app_url(urls)
def app_url(urls):
try:
resp = requests.head(urls)
if resp.status_code == 200:
print(urls,'app1')
else:
print('app2')
except:
print(urls,'app3')
get_status_app()
Ответы (1 шт):
Потому что urlы вложены в service_name (service1, service2 etc), поэтому они не будут доступны. В начале вам нужно узнать service_name, а уже потом вытаскиваете из него url, name etc. Попробуйте код ниже:
def get_status_app():
with open('config.yaml', 'r') as f:
dump = yaml.load_all(f, Loader=yaml.FullLoader)
for service_name in dump:
config = dump[service_name]
name = config['name']
url = config['url']
service = config['service']
time = config['time']
@ Dmitrii Seleznev а если будет еще один общий заголовок в yaml services и дальше уже service1..etc
Представьте yaml файл в виде дерева или проще словаря, где значением может быть еще один словарь.
Вы вытаскиваете из services значения services = dump['services'], а дальше итерируетесь по ним, узнавая service_name, только точка входа в значения service_name (url, name etc) будет уже services[service_name].
def get_status_app():
with open('config.yaml', 'r') as f:
dump = yaml.load_all(f, Loader=yaml.FullLoader)
services = dump['services']
for service_name in services:
config = services[service_name]
name = config['name']
url = config['url']
service = config['service']
time = config['time']
Наглядная структура вложенности в виде дерева:
services
└── service_name(service1)
└── url
└── google.com