Сам конфиг иерархический и выглядит так:
[20] [[9901]] pdu_length = 10 value_length = 2 [[[8501000000000000]]] description = "T sensor 08501#1" oh_name = Temperature_8501000000000000 value_modificator = "/100" value_sign = True little_endian = True is_interactive = False is_report = True sender_name = "Window_childrens_dimmer" [19] [[8303]] pdu_length = 0 value_length = 0 [[[8303_fake]]] description = "Discharge sensor 8303" oh_name = LowPower_8303000000000000 custom_value = "ON" is_interactive = False is_report = True sender_name = "Window_childrens_dimmer1"
Нужно найти sender_name по его значению и получить верхнюю к нему секцию.
Например для Window_childrens_dimmer1 нужно найти, ключ со значением sender_name = “Window_childrens_dimmer1” и получить его “верх ” = 19
Для Window_childrens_dimmer соответственно sender_name = “Window_childrens_dimmer” и 20
С помощью walk решается задача поиска ключа со значением, как найти “верх” для него придумать не могу. Нужна помощь.
P.S. Ключ ищу так:
def gather_subsection_key(section, key, search_string, search_section, res): if key==search_section: print ("=========FOUND KEY===============") print ("SECTION NAME:" + section.name) print ("SECTION DEPT:" + str(section.depth)) print ("KEY:" + key) if section[key]==search_string: print ("=========FOUND VALUE=============") print ("SECTION:" + section.name) print ("KEY:" + key) print ("VALUE:" + section[key]) print ("RETURNED:" + section.name) print ("=================================") res.append(section.name) conf = ConfigObj("/root/rs485_sniff/rs485dispatcher_sender.conf") conf.walk(gather_subsection_key,call_on_sections=False,search_string=dict_var['name'],search_section="sender_name",res=walk_res)