Форум сайта python.su
0
Есть задача найти в конфиге ключ и его значение и корневую секцию. Работаю под debian 8.5 и Python 2.7.9
Сам конфиг иерархический и выглядит так:
[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"
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)
Офлайн
857
>>> import configobj >>> import re >>> >>> text = """ ... [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" ... """ >>> >>> config = configobj.ConfigObj(text.splitlines()) >>> >>> def search_node_in_tree(config, key, valpat): ... for i in config: ... for j in config[i]: ... for k in config[i][j]: ... for l in config[i][j][k]: ... if (key == l ... and re.search(valpat, config[i][j][k][l])): ... return i, j, k ... return None ... >>> search_node_in_tree(config, 'sender_name', 'dimmer$') ('20', '9901', '8501000000000000') >>> search_node_in_tree(config, 'sender_name', 'dimmer1$') ('19', '8303', '8303_fake') >>> search_node_in_tree(config, 'sender_name', 'Window') ('20', '9901', '8501000000000000') >>>
Офлайн
0
Помогло, спасибо.
Офлайн