Python Forum
Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
loop printing twice
#1
Hi All,

below is the my code, however while I am checking List value in another file, post matching its printing twice.

from ciscoconfparse import CiscoConfParse
from ciscoconfparse.ccp_util import IPv4Obj
import netaddr
import mysql.connector
import re

def dslam_ip_fromdb():
    global mydb
    global dslamip_list 
    dslamip_list = [] 
    try:
        mydb = mysql.connector.connect(host="localhost",
                                       user="admin",
                                       passwd="nx63299",
                                       database="device")
        if mydb.is_connected():
            mycursor = mydb.cursor()
            sql = "SELECT * FROM host_details WHERE access_group='TTML'"
            try:
           # Execute the SQL command
                mycursor.execute(sql)
                # Fetch all the rows in a list of lists.
                results = mycursor.fetchall()
                for row in results:
                    ip_addr = row[6]
                    dslamip_list.append(ip_addr)
            except:
                 print("Error: unable to fecth data")
     
    except Error as e:
         print("Error reading data from MySQL table", e)
    finally:
        if (mydb.is_connected()):
           mydb.close()
           mycursor.close()
           print("MySQL connection is closed")
    with open('dslamips.txt') as ipdatafile:
         for sr_no, line in enumerate(ipdatafile, start=1):
             for ips in dslamip_list:
                 if ips in line:
                    print("{} {}".format(sr_no,line))


if __name__ == "__main__":
    interface_details = []
    # the result dictionary
    result = {
        "interfaces": {}
    }
    global sub_interface
    sr_no = 0
    conf_file = "E320.conf"
    confparse = CiscoConfParse(conf_file)
    global_obj = confparse.find_objects(r'^hostname')[0]
    sysname = global_obj.re_match_typed(r'^hostname\s+(\S+)', default='').strip('"')
   
    interface_cmds = confparse.find_objects(r"^interface ")
    for interface_cmd in interface_cmds:
        intf_name = interface_cmd.text[len("interface "):]
        result["interfaces"][intf_name] = {}
        result["interfaces"][intf_name]["svlan"] = "svlan_not_set"
        result["interfaces"][intf_name]["cvlan"] = "cvlan_not_set"
        for cmd in interface_cmd.re_search_children(r"^ svlan "):
            result["interfaces"][intf_name]["svlan"] = cmd.text.strip()[len(" svlan id"):].split(' ')[0]
            result["interfaces"][intf_name]["cvlan"] = cmd.text.strip()[len(" svlan id"):].split(' ')[1]
        result["interfaces"][intf_name]["status"] = "Active"
        for cmd in interface_cmd.re_search_children(r"^ shutdown"):
            result["interfaces"][intf_name]["status"] = "Shutdown"
    ip_static_routes_conf= confparse.find_blocks(r"^ip route ")
    with open('dslamips.txt','w') as routefile:
       for route in ip_static_routes_conf:
           if 'GigabitEthernet' in route:
               routefile.write(route+'\n')
    
    with open('svlan_cvlan.txt','w') as vlanfile: 
        for interface in result["interfaces"].items():
            if 'Shutdown' in interface[1].values() or 'lag' in interface[0]:
                continue
            
            if 'gigabitEthernet' in interface[0]:
                data = interface[0]+";",";".join(interface[1].values())
                data_to_write = data[0] + data[1]
                vlanfile.write(data_to_write+"\n")
            else:
                continue
    #Function calling
    dslam_ip_fromdb()
sample output

Output:
ip=10.218.128.10 5757 ip route 10.218.128.101 255.255.255.255 GigabitEthernet1/0/2.2787218 ip=10.218.128.101 5757 ip route 10.218.128.101 255.255.255.255 GigabitEthernet1/0/2.2787218 ip=10.218.128.10 5758 ip route 10.218.128.102 255.255.255.255 GigabitEthernet1/0/2.102182718 ip=10.218.128.103 5759 ip route 10.218.128.103 255.255.255.255 GigabitEthernet1/0/2.102182297 ip=10.218.128.10 5759 ip route 10.218.128.103 255.255.255.255 GigabitEthernet1/0/2.102182297 ip=10.218.128.10 5760 ip route 10.218.128.104 255.255.255.255 GigabitEthernet1/0/2.102181899 ip=10.218.128.104 5760 ip route 10.218.128.104 255.255.255.255 GigabitEthernet1/0/2.102181899 ip=10.218.128.10 5761 ip route 10.218.128.105 255.255.255.255 GigabitEthernet1/0/2.102182703 ip=10.218.128.10 5762 ip route 10.218.128.106 255.255.255.255 GigabitEthernet1/0/2.102181815 ip=10.218.128.106 5762 ip route 10.218.128.106 255.255.255.255 GigabitEthernet1/0/2.102181815 ip=10.218.128.107 5763 ip route 10.218.128.107 255.255.255.255 GigabitEthernet1/0/2.10218403 ip=10.218.128.10 5763 ip route 10.218.128.107 255.255.255.255 GigabitEthernet1/0/2.10218403 ip=10.218.128.10 5764 ip route 10.218.128.108 255.255.255.255 GigabitEthernet1/0/2.102181815 ip=10.218.128.10 5765 ip route 10.218.128.109 255.255.255.255 GigabitEthernet1/0/2.102182704 ip=10.218.128.111 5767 ip route 10.218.128.111 255.255.255.255 GigabitEthernet1/0/2.102182232 ip=10.218.128.112 5768 ip route 10.218.128.112 255.255.255.255 GigabitEthernet1/0/2.102181899 ip=10.218.128.113 5769 ip route 10.218.128.113 255.255.255.255 GigabitEthernet1/0/2.102181816 ip=10.218.128.116 5771 ip route 10.218.128.116 255.255.255.255 GigabitEthernet1/0/2.102182297 ip=10.218.128.117 5772 ip route 10.218.128.117 255.255.255.255 GigabitEthernet1/0/2.102181899 ip=10.117.1.199 6151 ip route 110.117.1.199 255.255.255.255 GigabitEthernet2/0/5.1011704 ip=10.117.1.19 6151 ip route 110.117.1.199 255.255.255.255 GigabitEthernet2/0/5.1011704
Reply
#2
issue found in below code, now its resolved.

with open('dslamips.txt') as ipdatafile:
         for sr_no, line in enumerate(ipdatafile, start=1):
             for ips in dslamip_list:
                 to_bematch_ip = line.strip().split(' ')[2]
                 if ips == to_bematch_ip:
                    dslamInterface = "gigabitEthernet "+(line.strip().split(' ')[-1].strip()[len("GigabitEthernet"):])
                    insert_DSLAM_dataInDB(dslamInterface,ips)
                    #print("ip={} {} {}".format(ips,sr_no,line))
Reply


Possibly Related Threads…
Thread Author Replies Views Last Post
  dict printing last key,value out of loop anna 6 3,271 Feb-23-2019, 03:22 AM
Last Post: anna

Forum Jump:

User Panel Messages

Announcements
Announcement #1 8/1/2020
Announcement #2 8/2/2020
Announcement #3 8/6/2020