Сравните значения двух переменных и верните совпадающие значения - PullRequest
0 голосов
/ 29 мая 2020

Здесь у меня есть два блока во входном файле: один начинается с «interface GigabitEthernet0 / 1/1» [субблок - «экземпляр службы»], а другой - с «interface BDI101». Каждый раз в al oop мне приходится сравнивать значение домена моста 1-го блока со значением BDI второго блока. Если значение совпадает, он должен вернуть значение BDI.

Input:
interface GigabitEthernet0/1/1
 description ff=A825
 service instance 1010
  description ff=A825
  encapsulation dot1q 10
  bridge-domain 101
 !
 service instance 1002
  description ff=A825
  encapsulation dot1q 10
  bridge-domain 102
 !
!
interface BDI101
 description vf=4445:cn=VODAMS:tl=3C02093047:st=act:
 vrf forwarding VF_RAN_SPK_OMCH_VRF1
!
interface BDI103
 description vf=4445:cn=VODAMS:tl=3C02093047:st=act:
 vrf forwarding VF_RAN_SPK_OMCH_VRF1
!

Code:
class a
    def compare(self):
        filePattern = '!*\n' + "interface" + "\sBDI" + ".*"
        bdiPattern = re.compile(filePattern)
        filePartPattern = '!*\n' + "interface" + '\s+.*' + "Ethernet" + '.*'
        pattern = re.compile(filePartPattern)
        for fileLine in fileLines:
            checkPartPattern = re.findall(bdiPattern,fileLine)
            checkFilePartPattern = re.findall(pattern, fileLine)
            for num in checkPartPattern:
                interBdiBlock = bdiBlock = re.search('('+num+'\n.*?)'+'!',logText,re.DOTALL)
                value = interBdiBlock.group(1)
                bdiValue = num.split()[2]
                bdi = re.search(r"([a-z]+)([0-9]+)", bdiValue, re.I)
                items = bdi.groups()
                BDI.append(items[1])
            #print(BDI)
            for domain in checkFilePartPattern:
                interfaceBlock = re.search('('+domain+'\n.*?)'+'\n!',logText, re.DOTALL)
                if interfaceBlock is not None:
                    block = interfaceBlock.group(1)
                    servicePattern = '\sservice instance' + '\s.*' + 'ethernet'
                    pattern1 = re.compile(servicePattern, re.I)
                    checkPattern = re.findall(pattern1, block)
                    if len(checkPattern) != 0:
                        for service in checkPattern:
                            serviceData = re.search('(' + service + '.*?\n)' + '\sservice', block, re.DOTALL)
                            if serviceData is not None:
                                block2 = serviceData.group(1)
                                name = re.search("\s\sbridge-domain" + "\s.*", block2)
                                if name is not None:
                                    block5 = name.group(0).split()
                                    BD.append(block5[1])

This is what I have tried till now but got stuck while comparing BDI and BD values.

Expected output : GigabitEthernet0/1/1.BDI101
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...