从cli字符串输出中识别键和值的算法

2024-04-19 02:16:08 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个命令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可以是值。 类似地,我想解析这些输出示例以识别其他键和值。有没有一个标准的算法可以让我朝着正确的方向去实现这个目标。你知道吗


Tags: nameidnumberforistypelinklength
1条回答
网友
1楼 · 发布于 2024-04-19 02:16:08

我不知道标准算法,但对于本例,您应该搜索' 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 '的实例并重复该过程。你知道吗

相关问题 更多 >