Source code for honeybee_plus.energyplus.filemanager

"""A collection of auxiliary funtions for working with radiance files and objects."""
import re
import os


[docs]def get_energy_plus_objects_from_string(ep_file_string): """ Parse idf file string. Args: ep_file_string: EnergyPlus data as a single string. The string can be multiline Returns: A list of strings. Each string represents a differnt Radiance Object """ _epObjects = {"zone": {}, "buildingsurface:detailed": {}, "fenestrationsurface:detailed": {}, "material": {}, "windowmaterial": {}, "construction": {}, "schedule": {}, "scheduletypelimits": {}, "globalgeometryrules": {}, "shading:site:detailed": {}, "shading:building:detailed": {}, "shading:zone:detailed": {}} raw_ep_objects = re.findall( r'.[^;]*;.*[^$]', "\n" + ep_file_string + "\n", re.MULTILINE) for obj in raw_ep_objects: # seperate each segment of EnergyPlus object segments = [seg.split("!")[0] for seg in re.findall(r'.+[,|;]', obj, re.MULTILINE)] # clean the objects and join them into a single comma separated string segments = "".join(segments).replace("\t", "").replace(" ", "")[:-1].split(",") # first segment is the type and the second one is the name # for now we're just collecting zones, surfaces, materials, constructions # and schedules. We should later use EnergyPlus.idd file to collect all # the objects. try: _epObjects[segments[0].lower()][segments[1]] = segments except KeyError: pass return _epObjects
[docs]def get_energy_plus_objects_from_file(ep_file_path): """ Parse EnergyPlus file and return a list of radiance objects as separate strings. TODO: Create a class for each EnergyPlus object and return Python objects instead of strings Args: ep_file_path: Path to EnergyPlus file Returns: A list of strings. Each string represents a differnt Radiance Object Usage: get_energy_plus_objects_from_file(r"C:/ladybug/21MAR900/energySimulation/21MAR900.rad") """ if not os.path.isfile(ep_file_path): raise ValueError("Can't find %s." % ep_file_path) with open(ep_file_path, "r") as epFile: return get_energy_plus_objects_from_string("".join(epFile.readlines()))
if __name__ == "__main__": objects = get_energy_plus_objects_from_file( r"C:/EnergyPlusV8-3-0/ExampleFiles/5ZoneWaterCooled_GasFiredSteamHumidifier.idf") # if the geometry rules is relative then all the points should be added # to X, Y, Z of zone origin print(objects['globalgeometryrules'].values()) for z in objects['zone']: print("zone:", objects['zone'][z]) for s in objects['buildingsurface:detailed']: print("buildingsurface:", s) for w in objects['fenestrationsurface:detailed']: print("fenestrationsurface:", w)