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'}