Я новичок в Python.У меня есть один файл YAML, и я обращаюсь к нему с помощью файла Python.В файле YAML есть опция полей.В файле YAML Пользователь может устанавливать переменные со значениями.Файл Python считывает переменные со значениями, а затем добавляет их в файл JSON.Обратите внимание, что переменные и значения могут быть изменены в соответствии с пользователем.
Как я могу сделать это возможным?
Вот пример кода:
import yaml
from datetime import datetime
import os
import json
#name for json file
name = "stack.json"
#load data from yml file
data = yaml.safe_load(open('stack.yml'))
data2 = data.get('heartbeat.monitors')
#Current time stamp
timestamp = datetime.now().strftime("%B %d %Y, %H:%M:%S")
#ip
ip ='192.168.1.1'
#getting data from the field and assign it to variable
for item in data2:
if item["type"] == "icmp":
fields_under_root = (item["fields_under_root"])
# if fields_under_root is true,code goes here
if fields_under_root == True:
fields = (item["fields"])
print(fields)
locals().update(fields)
#code to be entered
#if fields_under_root is false, code goes here
elif fields_under_root == False:
fields = (item["fields"])
print(fields)
#code to be entered
#For writing in JSON File
#Creates a JSON file if not exists
if not os.path.exists(name):
with open(name, 'w') as f:
f.write('{}')
#list for storing the values
result = [(timestamp, {'monitor.ip': ip,"fields": fields })]
#For writing in JSON File
with open(name, 'rb+') as f:
f.seek(-1, os.SEEK_END)
f.truncate()
for entry in result:
_entry = '"{}":{},\n'.format(entry[0], json.dumps(entry[1]))
_entry = _entry.encode()
f.write(_entry)
f.write('}'.encode('ascii'))
В файле YAML:
heartbeat.monitors:
- type: icmp
fields:
a: steven
b: kumar
fields_under_root: True
Мой вывод в JSON-файле:
{"February 18 2019, 17:04:30":{"monitor.ip": "192.168.1.1", "fields": {"b": "kumar", "a": "steven"}},
}
Требуемый вывод, если fields_under_root
равен True
:
{"February 18 2019, 17:04:30":{"monitor.ip": "192.168.1.1", "b": "kumar", "a": "steven"},
}
Требуемый вывод, если fields_under_root
равен False
:
{"February 18 2019, 17:04:30":{"monitor.ip": "192.168.1.1", "fields.b": "kumar", "fields.a": "steven"},
}