Алгоритм идентификации ключей и значений из выходных данных cli - PullRequest
0 голосов
/ 30 марта 2019

У меня есть команда show interface transciever, выход которой может отличаться. Я собрал некоторые примеры выходных данных для этой команды для различных сценариев.

Ethernet1/2
    transceiver is present
    type is 1000base-T
    name is CISCO-METHODE
    part number is SP7041-E-R
    revision is --
    serial number is MTC19350BBK
    nominal bitrate is 1300 MBit/sec
    Link length supported for copper is 100 m
    cisco id is 3
    cisco extended id number is 4

Ethernet1/3
    transceiver is present
    type is 1000base-T
    name is CISCO-METHODE
    part number is SP7041-E
    revision is E
    serial number is MTC150303LW
    nominal bitrate is 1300 MBit/sec
    Link length supported for copper is 100 m
    cisco id is 3
    cisco extended id number is 4

Ethernet1/4
    transceiver is present
    type is 1000base-T
    name is CISCO-METHODE
    part number is SP7041-E
    revision is E
    serial number is MTC1731072M
    nominal bitrate is 1300 MBit/sec
    Link length supported for copper is 100 m
    cisco id is 3
    cisco extended id number is 4

Ethernet1/5
    transceiver is not present

Ethernet1/6
    transceiver is not present

Ethernet1/7
    transceiver is present
    type is 10Gbase-SR
    name is CISCO-AVAGO
    part number is SFBR-709SMZ-CS1
    revision is G4.1
    serial number is AVD1718A4WN
    nominal bitrate is 10300 MBit/sec
    Link length supported for 50/125um OM2 fiber is 82 m
    Link length supported for 62.5/125um fiber is 26 m
    Link length supported for 50/125um OM3 fiber is 300 m
    cisco id is 3
    cisco extended id number is 4
    cisco part number is 10-2415-03
    cisco product id is SFP-10G-SR
    cisco vendor id is V03

^^ Некоторые образцы. Я хочу сравнить эти разные образцы и определить потенциальные ключи и значения.

Как:

  • трансивер присутствует
  • трансивера нет

transceiver is может быть ключом, а present/not present может быть значением. Точно так же я хотел бы проанализировать эти выходные примеры для определения других ключей и значений. Существует ли стандартный алгоритм , который может привести меня в правильном направлении для достижения этой цели.

1 Ответ

0 голосов
/ 30 марта 2019

Я не знаю о стандартном алгоритме , но для этого примера похоже, что вы должны искать экземпляры ' is ' и определять ключ как предыдущий текст, а значение как последующий текст.

Вот пример:

# Sample data
string = '''Ethernet1/2
    transceiver is present
    type is 1000base-T
    name is CISCO-METHODE
    part number is SP7041-E-R
    revision is --
    serial number is MTC19350BBK
    nominal bitrate is 1300 MBit/sec
    Link length supported for copper is 100 m
    cisco id is 3
    cisco extended id number is 4'''

sub = string.split('\n')

d = {}
d[sub[0]] = [x.strip() for x in sub[1:]]

e = {}
for key in d.keys():
    e[key] = {}
    for item in d[key]:
        new = item.split(' is ')
        e[key][new[0]] = new[1]
print(e)
{'Ethernet1/2': 
    {'transceiver': 'present', 
     'type': '1000base-T', 
     'name': 'CISCO-METHODE', 
     'part number': 'SP7041-E-R', 
     'revision': '--', 
     'serial number': 'MTC19350BBK', 
     'nominal bitrate': '1300 MBit/sec', 
     'Link length supported for copper': '100 m', 
     'cisco id': '3', 
     'cisco extended id number': '4'}}

Если есть экземпляры, имеющие более одного уровня, вы можете идентифицировать их с помощью дополнительного анализа, например поиска экземпляров ' for ' и повторяя процесс.

...