Skip to content
Snippets Groups Projects
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)