使用python解析mib文件,生成json文件提高可读性

本文涉及的产品
云解析 DNS,旗舰版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
全局流量管理 GTM,标准版 1个月
简介: 使用python解析mib文件,生成json文件提高可读性

使用python解析mib文件

只需要替换文件地址和生成文件路径,

#coding=utf-8

import re
import json

def getMib():
    trap_types=['OBJECT IDENTIFIER','OBJECT-TYPE','NOTIFICATION-TYPE','TRAP-TYPE']  #要获取的trap_type的类型
    f = open('HW-IMAPV1NORTHBOUND-TRAP-MIB.mib','r',encoding='utf-8')

    find_flag =False                #查找 DESCRIPTION 和 VALUE标记
    record_flag=False                 #记录 description标记
    description_line = []
    description = ''
    name = ''
    result = {}

    enterprises='1.3.6.1.4.1'       #每个mib文件可能引用了别的mib文件的对象 需要寻找初始值并添加
    management='1.3.6.1.4.1.2011.2.15.1'
    trap_name_value = {}
    trap_name_value['enterprises'] = enterprises
    trap_name_value['management'] = management

    for line in f :            #按行读入文件,此时line的type是str
        if '--' in line:        #过滤注释行
            continue
        if record_flag==False:

            for trap_type in trap_types:
                if trap_type in line:     #检验是否到了要写入的内容
                    #print('LINE:', line)
                    find_flag=True  #开启查找 DESCRIPTION 和 VALUE
                    name=line.split(trap_type)[0].strip()   #取 trap_type 前面的内容作为trap_name
                    #print('NAME:',line.split(key)[0].strip())
                    break

        if(find_flag):


            if 'DESCRIPTION' in line:
                record_flag=True  #开启记录 description
            if '::=' in line:
                #print('LINE:', line)
                value=line.split('::=')[1].strip()
                #print('name:',name)
                #print('description:',description)
                #print('value:',get_str_btw(value,'{','}').strip())
                trap_value=get_str_btw(value,'{','}').strip()
                #print('VALUE:',line.split('::=')[1].strip())

                if check_is_has_char(trap_value):
                    key=trap_value.split(' ')[0]
                    trap_value=trap_name_value[key]+'.'+trap_value.split(' ')[1]
                trap_name_value[name] = trap_value
                if trap_value not in result:
                    result[trap_value]={}
                result[trap_value]['name']= name
                result[trap_value]['desc'] = description
                find_flag=False#关闭查找 DESCRIPTION 和 VALUE
                record_flag=False#停止记录 description
                description_line.clear()
                continue
            if(record_flag):
                #print('LINE:', line)
                K = list(line.strip())
                if len(K) > 1:  # 去除文本中的空行
                    for i in K:  # 写入需要内容
                        description_line.append(i)

                strlist = ''.join(description_line)  # 合并列表元素
                newlines = str(strlist).lstrip('DESCRIPTION')
                description = newlines
                #print('DESCRIPTION:',newlines)
    return result
def get_str_btw(s, f, b):
    '''提取字符串s中,字符串f和b的中间部分'''
    if(s.find(f)>=0):
        par = s.partition(f)
        return (par[2].partition(b))[0][:]
    else:
        return s

def check_is_has_char(str):
    '''查找是否含有字母'''
    my_re = re.compile(r'[A-Za-z]',re.S)
    res = re.findall(my_re,str)
    if len(res):
        return True
    else:
        return False

result = getMib()
print(getMib())
j = json.dumps(result)
reFile = open('mib.json','w')
reFile.write(str(j))
#print(getMib())
相关文章
|
2天前
|
计算机视觉 Python
如何使用Python将TS文件转换为MP4
本文介绍了如何使用Python和FFmpeg将TS文件转换为MP4文件。首先需要安装Python和FFmpeg,然后通过`subprocess`模块调用FFmpeg命令,实现文件格式的转换。代码示例展示了具体的操作步骤,包括检查文件存在性、构建FFmpeg命令和执行转换过程。
19 7
|
12天前
|
程序员 测试技术 数据安全/隐私保护
深入理解Python装饰器:提升代码重用与可读性
本文旨在为中高级Python开发者提供一份关于装饰器的深度解析。通过探讨装饰器的基本原理、类型以及在实际项目中的应用案例,帮助读者更好地理解并运用这一强大的语言特性。不同于常规摘要,本文将以一个实际的软件开发场景引入,逐步揭示装饰器如何优化代码结构,提高开发效率和代码质量。
38 6
|
11天前
|
存储 缓存 Python
Python中的装饰器深度解析与实践
在Python的世界里,装饰器如同一位神秘的魔法师,它拥有改变函数行为的能力。本文将揭开装饰器的神秘面纱,通过直观的代码示例,引导你理解其工作原理,并掌握如何在实际项目中灵活运用这一强大的工具。从基础到进阶,我们将一起探索装饰器的魅力所在。
|
16天前
|
Android开发 开发者 Python
通过标签清理微信好友:Python自动化脚本解析
微信已成为日常生活中的重要社交工具,但随着使用时间增长,好友列表可能变得臃肿。本文介绍了一个基于 Python 的自动化脚本,利用 `uiautomator2` 库,通过模拟用户操作实现根据标签批量清理微信好友的功能。脚本包括环境准备、类定义、方法实现等部分,详细解析了如何通过标签筛选并删除好友,适合需要批量管理微信好友的用户。
24 7
|
18天前
|
测试技术 开发者 Python
使用Python解析和分析源代码
本文介绍了如何使用Python的`ast`模块解析和分析Python源代码,包括安装准备、解析源代码、分析抽象语法树(AST)等步骤,展示了通过自定义`NodeVisitor`类遍历AST并提取信息的方法,为代码质量提升和自动化工具开发提供基础。
32 8
|
17天前
|
XML 数据采集 数据格式
Python 爬虫必备杀器,xpath 解析 HTML
【11月更文挑战第17天】XPath 是一种用于在 XML 和 HTML 文档中定位节点的语言,通过路径表达式选取节点或节点集。它不仅适用于 XML,也广泛应用于 HTML 解析。基本语法包括标签名、属性、层级关系等的选择,如 `//p` 选择所有段落标签,`//a[@href='example.com']` 选择特定链接。在 Python 中,常用 lxml 库结合 XPath 进行网页数据抓取,支持高效解析与复杂信息提取。高级技巧涵盖轴的使用和函数应用,如 `contains()` 用于模糊匹配。
|
17天前
|
Python
如何提高Python代码的可读性?
如何提高Python代码的可读性?
30 4
|
25天前
|
数据可视化 图形学 Python
在圆的外面画一个正方形:Python实现与技术解析
本文介绍了如何使用Python的`matplotlib`库绘制一个圆,并在其外部绘制一个正方形。通过计算正方形的边长和顶点坐标,实现了圆和正方形的精确对齐。代码示例详细展示了绘制过程,适合初学者学习和实践。
38 9
|
25天前
|
存储 缓存 开发者
Python编程中的装饰器深度解析
本文将深入探讨Python语言的装饰器概念,通过实际代码示例展示如何创建和应用装饰器,并分析其背后的原理和作用。我们将从基础定义出发,逐步引导读者理解装饰器的高级用法,包括带参数的装饰器、多层装饰器以及装饰器与类方法的结合使用。文章旨在帮助初学者掌握这一强大工具,同时为有经验的开发者提供更深层次的理解和应用。
31 7
|
25天前
|
消息中间件 存储 Java
RocketMQ文件刷盘机制深度解析与Java模拟实现
【11月更文挑战第22天】在现代分布式系统中,消息队列(Message Queue, MQ)作为一种重要的中间件,扮演着连接不同服务、实现异步通信和消息解耦的关键角色。Apache RocketMQ作为一款高性能的分布式消息中间件,广泛应用于实时数据流处理、日志流处理等场景。为了保证消息的可靠性,RocketMQ引入了一种称为“刷盘”的机制,将消息从内存写入到磁盘中,确保消息持久化。本文将从底层原理、业务场景、概念、功能点等方面深入解析RocketMQ的文件刷盘机制,并使用Java模拟实现类似的功能。
40 3