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