摘要:通过函数找到所有符合上述要求的文本内容,并赋值给,通过打印,该值是一个,每一个匹配项作为一个列表单元。循环遍历上述的查找结果通过查找出来的内容,使用访问,并将剥去,就变成槽位信息了。通过查找出来的内容,经过处理就变成信息了。
处理思科设备 show inventory输出内容 任务目标
通过Python读取show inventory的内容,并将设备的槽位、模块型号和序列号自动写入CVS文件。否则,我需要打开每一个文件,找到设备每一个槽位、母卡、子卡和序列号,并一一填写到表格中。操作繁琐且重复,因此考虑用Python实现。
show inventory 输出内容示例</>复制代码
RP/0/RP0/CPU0:crs-1#admin show inventory
Thu Jul XX 16:08:46.990 GMT
NAME: "0/1/*", DESCR: "Cisco CRS Series Modular Services Card 400G"
PID: CRS-MSC-X, VID: V03, SN: CAT20XXXX0J
NAME: "ControlEthernet0/1/CPU0", DESCR: "CPU_PORT_0"
PID: , VID: N/A, SN:
NAME: "0/PL1/*", DESCR: "Cisco CRS Series 4x100GbE Interface Module"
PID: 4X100GE-LO, VID: V01, SN: CATXXXXT00W
NAME: "HundredGigE0/1/0/0", DESCR: "100GBASE-LR4"
PID: CPAK-100G-LR4 , VID: V04, SN: FBNXXXX0141
NAME: "HundredGigE0/1/0/1", DESCR: "100GBASE-LR4"
PID: CPAK-100G-LR4 , VID: V04, SN: FBNXXXX0582
NAME: "HundredGigE0/1/0/2", DESCR: "100GBASE-LR4"
PID: CPAK-100G-LR4 , VID: V04, SN: FBNXXXX0546
NAME: "HundredGigE0/1/0/3", DESCR: "100GBASE-LR4"
PID: CPAK-100G-LR4 , VID: V04, SN: FBNXXXX0340
NAME: "0/4/*", DESCR: "Cisco CRS-1 Series Modular Services Card revision B"
PID: CRS-MSC-B, VID: V07, SN: SADXXXX020C
NAME: "ControlEthernet0/4/SP", DESCR: "CPU_PORT_0"
PID: , VID: N/A, SN:
NAME: "ControlEthernet0/4/CPU0", DESCR: "CPU_PORT_1"
PID: , VID: N/A, SN:
NAME: "0/PL4/*", DESCR: "Cisco Carrier Routing System SPA Interface Processor Card"
PID: CRS1-SIP-800, VID: V04, SN: SALXXXXGX57
NAME: "0/4/0", DESCR: "1-port OC192/STM64 POS/RPR XFP Optics"
PID: SPA-OC192POS-XFP, VID: V05, SN: SALXXXXFAN0
Python代码的实现
</>复制代码
# 引入re、csv模块
import re
import csv
# 将待处理的文件读入data_buff。
with open(inventory) as file_obj:
data_buff = file_obj.read()
# 定义几个正则表达式对象如下:
mixRegex = re.compile(r"^NAME: .*
"
r"^PID: .*SN: .*"
,re.MULTILINE)
mix_match = mixRegex.findall(data_buff)
nameRegex = re.compile("^NAME: .*,")
modRegex = re.compile("^PID: .*,",re.MULTILINE)
snRegex = re.compile("SN: .*",re.MULTILINE)
# 以上几个正则表达式的目的如下:
# mixRegex,该表达式匹配以”NAME:”开头,并且,第二行以”PID:”开头,包含”SN:”。
# 通过findall函数找到所有符合上述要求的文本内容,并赋值给mix_match,通过打印,该值是一个list,每一个匹配项作为一个列表单元。
# nameRegex、modRegex和snRegex分别在以下代码中进行过滤
# 初始化两个列表,其中一个作为子列表,最终形成一个二维列表。
slot_map = []
sub_map = []
# for循环遍历上述的查找结果mix_match;
# 通过nameRegex查找出来的内容,使用group()访问,并将”NAME: ”剥去,就变成槽位信息了。字符最后多一个”””是为了防止Excel表自动的把0/4/0改成日期。len(slot) < 10,是去除一些不需要统计的内容,如"ControlEthernet0/4/SP"。
# 通过modRegex查找出来的内容,经过处理后就变成PID信息了。
# 通过snRegex查找出来的内容,经过处理就变成SN信息了。
# 然后分别把这些信息存入list sub_map中,再存到slot_map,变为二维表。
for each_pair in mix_match:
slot = nameRegex.search(each_pair).group()[7:-1]
if len(slot) < 10:
card = modRegex.search(each_pair).group().split(",")[0][5:].strip()
sn = snRegex.search(each_pair).group()[4:]
# print(sn)
sub_map.append(slot)
sub_map.append(card)
sub_map.append(sn)
slot_map.append(sub_map)
# print(sub_map)
sub_map = []
# 以下代码将上述生成的二维列表写入到CSV文件中。
csv_output = inventory + "-slotmap.csv"
with open(csv_output,"w") as file_obj:
wr = csv.writer(file_obj)
for list in slot_map:
wr.writerow(list)
前一篇文章写了处理show ip int brief输出。
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/40658.html
摘要:复杂系统仿真的微博客虚假信息扩散模型研究面向影子分析的社交媒体竞争情报搜集面向人机协同的移动互联网政务门户探析经验证。微博客的企业竞争情报搜集移动社交媒体用户隐私保护对策研究注意这里的提示,原先的个文件没有被再次抽取,只有个新文件被抽取。 showImg(https://segmentfault.com/img/bVbiU7y?w=1000&h=508); 本文为你展示,如何用Pyth...
摘要:是你学习从入门到专家必备的学习路线和优质学习资源。的数学基础最主要是高等数学线性代数概率论与数理统计三门课程,这三门课程是本科必修的。其作为机器学习的入门和进阶资料非常适合。书籍介绍深度学习通常又被称为花书,深度学习领域最经典的畅销书。 showImg(https://segmentfault.com/img/remote/1460000019011569); 【导读】本文由知名开源平...
摘要:主要用来调用命令行,因为模块无法解析的文件,所以在解析前将的文件转换成文件。主要用于遍历文件夹获取文件。总结利用还是减少了一定的重复劳动,但面对一些不标准的东东貌似还没有很好的方式。 目前我的文件夹中有500多份简历,如果我想知道一些信息,比如学校,学历之类的,我需要打开每一份word去查看,太耗时间了。这个时候python需要出马了。 目标 目前类似截图中的word有600+,想简单...
阅读 2235·2023-04-25 15:24
阅读 1675·2019-08-30 12:55
阅读 1686·2019-08-29 15:27
阅读 566·2019-08-26 17:04
阅读 2516·2019-08-26 10:59
阅读 1886·2019-08-26 10:44
阅读 2282·2019-08-22 16:15
阅读 2690·2019-08-22 15:36