-
Richter, Manuela authoredRichter, Manuela authored
Code owners
Assign users and groups as approvers for specific file changes. Learn more.
trial_json.py 3.33 KiB
# -*- coding: utf-8 -*-
"""
Created on Thu May 5 17:27:38 2022
@author: Richter
testfile for operating with json-files
"""
#%% import moduls
import json
import numpy as np
import pandas as pd
import h5py as h5
#%% define functions
def findkeys(node, kv):
'''
https://stackoverflow.com/questions/9807634/find-all-occurrences-of-a-key-in-nested-dictionaries-and-lists
Parameters
----------
node : TYPE
DESCRIPTION.
kv : TYPE
DESCRIPTION.
Yields
------
TYPE
DESCRIPTION.
'''
if isinstance(node, list):
for i in node:
for x in findkeys(i, kv):
yield x
elif isinstance(node, dict):
if kv in node:
yield node[kv]
for j in node.values():
for x in findkeys(j, kv):
yield x
def find_attribut(data,attribut):
name_pump = list(findkeys(data, "Name"))
efficiency_pump = list(findkeys(data, attribut))
#print("Die Pumpe",name_pump[0],"besitzt den Wirkungsgrad", efficiency_pump[0])
return name_pump, efficiency_pump
def calculate_efficiency(eta_1, eta_2):
eta = eta_1 * eta_2
return eta
#%% main script
with open("test_data.json","r+") as file:
data = json.load(file)
a = data.keys()
#print(a)
# read out key - value - pairs
for i in a:
key = data[i]
for j in range(0,len(key)):
#print(j)
dic = key[j]
attrs = list(dic.keys())
for x in attrs:
name = list(findkeys(dic, x))
#print("Maschinenart", i, "Das Attribut",x, "hat den Wert", name)
# find specific data
machine = "Motors"
attribut = "Efficiency"
data_pumps = data["Pumps"]
data_motors = data["Motors"]
dataset = pd.DataFrame()
#pump_1 = data_pumps[0]
# Iteration über Attribute einfügen
for i in range(0,len(data_pumps)):
attr_name = list(findkeys(data_pumps[i], "Name"))
attr_value = list(findkeys(data_pumps[i], attribut))
#attr_name, attr_value = find_attribut(data_pumps[i], attribut)
#efficiency_pump)
print("Die",machine,attr_name[0],"besitzt das Attribut",attribut, "mit dem Wert", attr_value[0])
# multiplicate the pump efficiency with the motor efficiency
eta_motor_1 = list(findkeys(data["Motors"][0], "Efficiency"))[0]
eta_motor_2 = list(findkeys(data["Motors"][1], "Efficiency"))[0]
eta_pumpe_1 = list(findkeys(data["Pumps"][0], "Efficiency"))[0]
eta_pumpe_2 = list(findkeys(data["Pumps"][1], "Efficiency"))[0]
count = 0
#iteration over all pumps and motors
for p in range(0,len(data_pumps)):
for m in range(0,len(data_motors)):
eta_pumpe=list(findkeys(data_pumps[p], attribut))[0]/100
eta_motor=list(findkeys(data_motors[m], attribut))[0]/100
eta_ges = calculate_efficiency(eta_pumpe, eta_motor)
scenario = "Szenario_" + str(count)
dataset[scenario] = [eta_pumpe,eta_motor,eta_ges]
dataset.index = ["eta_pumpe","eta_motor","eta_ges"]
count +=1
print(p,m,eta_ges)
#%% store dataframe in hdf5-file
filename = "example_kpi.h5"
with pd.HDFStore(filename, "a") as hdf:
try:
dataset.to_hdf(hdf,"Berechnung")
except ValueError:
print("Gruppe existiert bereits.")
with h5.File(filename, "a") as hdf:
grp = hdf.get("Test")
grp_2 = hdf.get("Berechnung")
print(grp, grp_2)