Sep-04-2019, 01:13 PM
I am parsing, ZyXEL DSLAM configuration file, support required to dict as per range of data.
from ciscoconfparse import CiscoConfParse from ciscoconfparse.ccp_util import IPv4Obj conf_file = "f:/10.217.129.53_2019-07-19.dat" confparse = CiscoConfParse(conf_file) adsl_names = confparse.find_blocks(r"^adsl name ") data = [] for name in adsl_names: adsl_details = {} adsl_port = name.strip()[len("adsl name "):].split(' ')[0] customer_name = name.strip()[len("adsl name "):][2:] adsl_details['port'] = adsl_port adsl_details['customer'] = customer_name data.append(adsl_details) """processing conf line like 'adsl name 3,24 reliance park would like to store data like port:3 customer:reliance park port:24 customer:reliance park""" if ',' in name: start_port = name.strip()[len("adsl name "):].split(' ')[0].split(',')[0] end_port = name.strip()[len("adsl name "):].split(' ')[0].split(',')[0] customer_name = name.strip()[len("adsl name "):].split(' ')[1:] #appending first port and customer value adsl_details['port'] = start_port adsl_details['customer'] = customer_name data.append(adsl_details) #appending second port and customer value adsl_details['port'] = end_port adsl_details['customer'] = customer_name data.append(adsl_details) """processing conf like like 'adsl name 11~16,20~21 shivraj patil' where I want to process and store data like port:11 customer:shivraj patil port:12 customer:shivraj patil port:13 customer:shivraj patil port:14 customer:shivraj patil port:15 customer:shivraj patil port:16 customer:shivraj patil port:20 customer:shivraj patil port:21 customer:shivraj patil""" if '~' in name and name.count('~') == 2: first_range = name.strip()[len("adsl name "):].split(',')[0] first_range_start = name.strip()[len("adsl name "):].split(',')[0].split('~')[0] first_range_end = name.strip()[len("adsl name "):].split(',')[0].split('~')[1] customer_name = name.strip()[len("adsl name "):].split(',')[1].split(' ')[1:] customer_name_fist_range = ' '.join(customer_name) for port in range(int(first_range_start),int(first_range_end)+1): #print(port) adsl_details['port'] = port adsl_details['customer'] = customer_name_fist_range data.append(adsl_details) second_range = name.strip()[len("adsl name "):].split(',')[1].split(' ')[0] customer_name = name.strip()[len("adsl name "):].split(',')[1].split(' ')[1:] #print(second_range) second_range_start = second_range.split('~')[0] second_range_end = second_range.split('~')[1] #print(second_range_start,second_range_end) for second_range_port in range(int(second_range_start),int(second_range_end)+1): #print(second_range_port) adsl_details['port'] = second_range_port adsl_details['customer'] = customer_name data.append(adsl_details) for items in data: print(items)Output:{'port': '1', 'customer': 'Ashank Race PVT LTD'} {'port': '2', 'customer': 'praful'} {'port': '3', 'customer': ['reliance', 'park']} {'port': '3', 'customer': ['reliance', 'park']} {'port': '3', 'customer': ['reliance', 'park']} {'port': '5', 'customer': 'sort & ltd'} {'port': '7', 'customer': 'kishor'} {'port': '8', 'customer': 'syed'} {'port': '9', 'customer': 'pinki'} {'port': '10', 'customer': ' Sushil'} {'port': 21, 'customer': ['shivraj', 'patil']} {'port': 21, 'customer': ['shivraj', 'patil']} {'port': 21, 'customer': ['shivraj', 'patil']} {'port': 21, 'customer': ['shivraj', 'patil']} {'port': 21, 'customer': ['shivraj', 'patil']} {'port': 21, 'customer': ['shivraj', 'patil']} {'port': 21, 'customer': ['shivraj', 'patil']} {'port': 21, 'customer': ['shivraj', 'patil']} {'port': 21, 'customer': ['shivraj', 'patil']} {'port': 21, 'customer': ['shivraj', 'patil']} {'port': 21, 'customer': ['shivraj', 'patil']} {'port': '17', 'customer': ' urvi'} {'port': '22', 'customer': ' Ritesh Patil'} {'port': '23', 'customer': ' kankunta'} {'port': '25', 'customer': ' abh=hek'} {'port': '27', 'customer': ' Tanuja'} {'port': '29', 'customer': ' Kamal'} {'port': '32', 'customer': ' M/S Balaji'} {'port': '33', 'customer': ' M/s Balaji'} {'port': '37', 'customer': ' freeg wifi'} {'port': '38', 'customer': ' anjana'} 