Читать разделы из файла с Python
Я пытаюсь преобразовать текущую конфигурацию cisco в параметры, используя python, и я застрял при чтении разделов конфигурации с python. Скажем, например, у вас есть следующая строфа:
!
interface Async1
no ip address
encapsulation slip
!
router bgp 65500
bgp router-id 1.1.1.1
bgp log-neighbor-changes
timers bgp 10 30
neighbor 1.2.3.4 remote-as 1234
neighbor 1.2.3.4 description Some Description
neighbor 1.2.3.4 update-source GigabitEthernet0/0
!
address-family ipv4
network 2.2.2.2 mask 255.255.255.255
network 3.3.3.0 mask 255.255.255.252
neighbor 1.2.3.4 activate
neighbor 1.2.3.4 allowas-in 3
neighbor 1.2.3.4 prefix-list PXL out
exit-address-family
!
ip forward-protocol nd
no ip http server
no ip http secure-server
!
Я хочу читать строки из 'router bgp' до первой строки, которая начинается с '!' (например, ^!), а затем перечитайте блок, чтобы извлечь параметры в переменные. Пример вывода будет:
router bgp 65500
bgp router-id 1.1.1.1
bgp log-neighbor-changes
timers bgp 10 30
neighbor 1.2.3.4 remote-as 1234
neighbor 1.2.3.4 description Some Description
neighbor 1.2.3.4 update-source GigabitEthernet0/0
!
address-family ipv4
network 2.2.2.2 mask 255.255.255.255
network 3.3.3.0 mask 255.255.255.252
neighbor 1.2.3.4 activate
neighbor 1.2.3.4 allowas-in 3
neighbor 1.2.3.4 prefix-list PXL out
exit-address-family
!
Примечание: я могу извлечь приведенный выше код с помощью awk или grep, но я хочу перевести мой bash-код на Python.
Спасибо!
1 ответ
Попробуй это:
from ciscoconfparse import CiscoConfParse
bgp = confparse.find_blocks(r"^router bgp 65500")
Благодаря другому сообщению о stackru, я нашел способ извлечь разделы конфигурации из запущенного config. Сообщение находится на чтение файла для определенного раздела в Python.
Рабочий код для извлечения раздела "router bgp" ниже:
bgp_found = False
bgp_section = []
with open('running-config', 'r') as f:
for line in f.readlines():
if 'router bgp' in line:
bgp_found = True
bgp_section.append(str(line).rstrip('\n')) # this will append the section start to list
continue
if bgp_found:
if line.startswith('!'): # this will test if line starts with '!'
bgp_found = False
else:
bgp_section.append(str(line).rstrip('\n'))
print (bgp_section) # just for testing purposes; list would be used to extract rest of parameters
Надеюсь, что это будет полезно и для других.