2015-06-08 2 views
1

Я использую сервер Rancid для сохранения информации о коммутаторах Cisco в сети. Я хотел бы написать сценарий Python 3, чтобы извлечь часть конфигурации данных в текстовый файл. Я получил это для работы, но у меня есть файл, который имеет конфигурацию в нем дважды, и мне нужен только первый конфиг.Сохраните одну часть текстового файла

Это то, что я сделал:

import sys 

flag = False 

start = ('version', 'config-register') 
end = ('@\n', 'monitor 6\n', 'end\n') 

with open(sys.arbv[1], "r") as file: 
     for line in file: 

        if line.startswith(start): 
          file = True; 

        if flag: 
          sys.stdout.write(line) 

        if line.endswith(end): 
          flag = False 

файл, который имеет конфигурации он дважды использует 'version' для начала и '@\n' для конца. Я попытался использовать break, но я все еще получаю обе конфигурации.

Пример файла: VTP: VTP доменное имя: VTP: VTP Режим Обрезка: Disabled (Оперативно Disabled) VTP: VTP режим V2: Disabled VTP: VTP Ловушки Generation: Disabled VTP : MD5 Дайджест: 0x05 0xBB 0x45 0x03 0x57 0xBE 0xBA 0x57 ! VTP: версия VTP работает: 1 ! ! DEBUG: Уровень отладки установлен на Незначительный (1) ! DEBUG: по умолчанию для новых уровней регистрации сеансов: 3 ! ! CORES: Module Instance Имя процесса Дата PID (год-месяц-время) ! CORES: ------ -------- ------------- - -------- ------------------------- ! ! PROC_LOGS: Process PID Normal-exit Stack Core Log-create-time ! PROC_LOGS: --------------- ------ --------- - ----- ----- --------------- !

version 5.2(1)N1(4) 
logging level feature-mgr 0 
hostname 

no feature telnet 
feature tacacs+ 
cfs eth distribute 
feature udld 
feature interface-vlan 
feature lacp 
feature vpc 
feature lldp 
feature vtp 
feature fex 

username (removed) 

**** content removed **** 

Interface Section 


clock timezone CTD -6 0 
line console 
    exec-timeout 5 
line vty 
    session-limit 5 
    session-limit 5 
    exec-timeout 5 
    access-class 3 in 
boot kickstart 
boot system 
ip route 
no ip source-route 


@ 


1.75 
log 
@updates 
@ 
text 
+0

Добавить фактический контент, начало и конец не имеют смысла, как раздел может начинаться с двух разных строк и заканчиваться тремя разными строками? –

+0

У меня есть три разных типа переключателей, два файла имеют строку «config-register», а третий файл имеет строку «version». И каждый файл имеет отдельную строку, где заканчивается конфиг. Стартовая переменная - это то, где я запускаю программу и останавливаюсь у конечной переменной. – Kobra

+0

Если вы предоставите образец, вам будет намного легче помочь –

ответ

0

Порядок заказа и конфиг-регистр здесь. Таким образом, вам может быть лучше просто повторить этот файл дважды. Таким образом вы можете разделить свои разделы файла, который вам нужно найти в виде групп. Однажды найдите значения версии и один раз, чтобы найти config-register.

import sys 

flag = False 

VERSION_NAME = r'version' 

CONFIG_NAME = r'config-register' 

end = ('@\n', 'monitor 6\n', 'end\n') 

FILE_NAME = sys.argv[1] 


# find the config-register 
with open(FILE_NAME, "r") as file: 
    start = CONFIG_NAME 
    config_found = False 

    for line in file: 
     if line.startswith(start) and not config_found: 
      flag = True     # correction 

     if flag: 
      sys.stdout.write(line) 
     if flag and line.endswith(end): 
      print("Found Break") 
      break       # correction 

     if line.startswith(start): 
      config_found = True 


# find the version 
with open(FILE_NAME, "r") as file: 
    start = VERSION_NAME 
    config_found = False 

    for line in file: 
     if line.startswith(start) and not config_found: 
      flag = True 

     if flag: 
      sys.stdout.write(line) 

     if flag and line.endswith(end): 
      print("Found Break") 
      break 

     if line.startswith(start): 
      config_found = True 

Затем вы будете снова зацикливаться и только искать конфигурационную версию и «конец» для этого. Это не самая высокая производительность, но поскольку вы не обрабатываете весь файл, мы надеемся, что это удовлетворит ваши потребности.

Смежные вопросы