我有一个命令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
可以是价值。同样,我想解析这些输出样本以识别其他键和值。是否有标准算法可以让我朝着正确的方向实现这一目标。
我不知道标准算法,但是对于这个例子,你看起来应该搜索' 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 '
的实例并重复该过程。