Я не понимаю, почему я получаю эту ошибку Bytes_Written находится в наборе данных, но почему Python не может найти его? Я получаю эту информацию (см набора данных ниже) из виртуальной машины, я хочу, чтобы выбрать Bytes_Written и bytes_read, а затем вычесть предыдущие значения из текущего значения и распечатать объект JSon как этогоKeyError: 'Bytes_Written' python
{'Bytes_Written': previousValue-currentValue, 'Bytes_Read': previousValue-currentValue}
вот что данные выглядят так:
{
"Number of Devices": 2,
"Block Devices": {
"bdev0": {
"Backend_Device_Path": "/dev/disk/by-path/ip-192.168.26.1:3260-iscsi-iqn.2010-10.org.openstack:volume-d1c8e7c6-8c77-444c-9a93-8b56fa1e37f2-lun-010.0.0.142",
"Capacity": "2147483648",
"Guest_Device_Name": "vdb",
"IO_Operations": "97069",
"Bytes_Written": "34410496",
"Bytes_Read": "363172864"
},
"bdev1": {
"Backend_Device_Path": "/dev/disk/by-path/ip-192.168.26.1:3260-iscsi-iqn.2010-10.org.openstack:volume-b27110f9-41ba-4bc6-b97c-b5dde23af1f9-lun-010.0.0.146",
"Capacity": "2147483648",
"Guest_Device_Name": "vdb",
"IO_Operations": "93",
"Bytes_Written": "0",
"Bytes_Read": "380928"
}
}
}
Это полный код, который я использую.
FIELDS = ("Bytes_Written", "Bytes_Read", "IO_Operation")
def counterVolume_one(state):
url = 'http://url'
r = requests.get(url)
data = r.json()
for field in FIELDS:
state[field] += data[field]
return state
state = {"Bytes_Written": 0, "Bytes_Read": 0, "IO_Operation": 0}
while True:
counterVolume_one(state)
time.sleep(1)
for field in FIELDS:
print("{field:s}: {count:d}".format(field=field, count=state[field]))
counterVolume_one(state)
'data ['Block Devices'] [field]' - ваш словарь находится внутри другого словаря, ключ которого - «Блочные устройства». –