# -*- 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 #%% 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) dataset[count] = [eta_pumpe,eta_motor,eta_ges] count +=1 print(p,m,eta_ges)