首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从cli字符串输出中识别键和值的算法

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

Stack Overflow用户
提问于 2019-03-30 16:50:14
回答 1查看 207关注 0票数 0

我有一个命令show interface transciever,其输出可能会有所不同。我收集了针对不同场景的该命令的一些示例输出。

代码语言:javascript
复制
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可以是值。类似地,我希望解析这些输出示例以识别其他键和值。是否有一个标准算法,可以把我带到正确的方向来实现这一点。

EN

回答 1

Stack Overflow用户

发布于 2019-03-30 16:55:09

我不知道标准算法,但在这个示例中,您应该搜索' is '实例,并将键定义为前面的文本,值定义为后续文本。

下面是一个示例:

代码语言:javascript
复制
# 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)
代码语言:javascript
复制
{'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 '实例和重复流程。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55433635

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档