python字典和结构体间的快速转换方法技术

技术编号:27264892 阅读:135 留言:0更新日期:2021-02-06 11:28
本发明专利技术公开了一种python字典和结构体间的快速转换方法,包括:S1、搭建python环境;S2、在所述python环境中构建一个转换文件;S3、在所述转换文件中创建用于字典和结构体相互转换的第一函数和第二函数;S4、利用待转换结构体定义实例M,对M进行赋值后,调用所述第一函数将赋值后的M转换为字典a,即实现结构体转换字典;S5、清空对M的赋值,调用所述第二函数将字典a内的值赋值给所述待转换结构体,即实现字典对结构体的赋值。其采用统一的函数实现字典和结构体间的相互转换,极大的提高了开发效率,增强了代码健壮性,降低了维护成本,缩小了二次开发的工作量。二次开发的工作量。二次开发的工作量。

【技术实现步骤摘要】
python字典和结构体间的快速转换方法


[0001]本专利技术涉及数据处理
,特别涉及一种python字典和结构体间的快速转换方法。

技术介绍

[0002]Python是一种面向对象、解释型计算机程序设计语言,由Guidovan Rossum于1989年底专利技术,第一个公开发行版发行于1991年。Python语法简洁而清晰,具有丰富和强大的类库。
[0003]目前许多基于python来实现的web框架,在服务器客服端模型中的数据处理都会涉及用python来处理数据,大多数web和客服端交互数据都会使用json格式来传输数据,但是,如果服务器的底层功能是用c语言来实现的,这种情况通常需要利用python使用ctypes库来调用c的动态库来实现数据交互,这个时候就会涉及到字典和ctypes中的结构体相互赋值转换的过程,传统操作为针对结构体里面的每个元素单独赋值给字典或者从字典里面取出来赋值给结构体,即都是具体到数据类型里面去依次赋值,这样开发效率低而且容易出错,而且如果结构体增加元素或者删除元素都必须修改这两种数据格式相互转换的代码,维护成本极高,代码健壮性也较差,因而,迫切需要一种能够使这两种数据格式进行相互转换的简便方法。

技术实现思路

[0004]本专利技术的一个目的是解决至少上述问题,并提供至少后面将说明的优点。
[0005]本专利技术还有一个目的是提供一种python字典和结构体间的快速转换方法,采用统一的函数实现字典和结构体间的相互转换,极大的提高了开发效率,增强了代码健壮性,降低了维护成本,缩小了二次开发的工作量。
[0006]为了实现根据本专利技术的这些目的和其它优点,提供了一种python字典和结构体间的快速转换方法,包括以下步骤:
[0007]S1、搭建python环境;
[0008]S2、在所述python环境中构建一个转换文件;
[0009]S3、在所述转换文件中创建用于字典和结构体相互转换的第一函数和第二函数;
[0010]S4、利用待转换结构体定义实例M,对M进行赋值后,调用所述第一函数将赋值后的M转换为字典a,即实现结构体转换字典;
[0011]S5、清空对M的赋值,调用所述第二函数将字典a内的值赋值给所述待转换结构体,即实现字典对结构体的赋值。
[0012]优选的是,所述的python字典和结构体间的快速转换方法中,S4中调用所述第一函数将赋值后的M转换为字典a后,还需验证所述第一函数返回的结果是否正确,是,则转至S5;否,则重新创建所述第一函数;
[0013]S5中调用所述第二函数将字典a内的值赋值给所述待转换结构体后,还需验证赋
值后的待转换结构体内成员的值是否正确,是,则后续采用所述第一函数和第二函数实现字典和结构体相互转换;否,则重新创建所述第二函数。
[0014]优选的是,所述的python字典和结构体间的快速转换方法中,S1中,所述python环境中包含python ctypes库。
[0015]优选的是,所述的python字典和结构体间的快速转换方法中,字典的键和结构体的成员的名字一致时才能进行相互转换。
[0016]优选的是,所述的python字典和结构体间的快速转换方法中,在相互转换前,需要按照赋值方式的不同将结构体内的成员的数据类型以及字典中所使用的数据类型分别进行分类,并在分类后的成员的数据类型和分类后的字典中所使用的数据类型间建立对应关系。
[0017]优选的是,所述的python字典和结构体间的快速转换方法中,S3中,所述第一函数的构建方法具体为:
[0018]S1-1、循环获取结构体内的所有成员,并依据分类后的成员的数据类型分别确定所有成员的类型;
[0019]S1-2、利用python字典中的getattr函数获取各个成员的值;
[0020]S1-3、依据S1-1中确定的成员的类型为各个成员进行赋值处理。
[0021]优选的是,所述的python字典和结构体间的快速转换方法中,S1-1中,当循环获取的结构体内的成员仍为结构体时,则对获取的结构体再次进行循环获取;当循环获取的结构体内的成员为数组时,则对数组内的元素按照相应的分类后的成员的数据类型进行相应的处理;当循环获取的结构体的成员为除结构体和数组外的其他成员时,则直接对成员进行赋值处理。
[0022]优选的是,所述的python字典和结构体间的快速转换方法中,S1-1前,还需利用python字典中的isinstance函数验证结构体的参数类型是否错误,是,则结束所述isinstance函数并返回空字典;否,则利用结构体的文件属性循环获取结构体内的所有成员。
[0023]优选的是,所述的python字典和结构体间的快速转换方法中,S3中,所述第二函数的构建方法具体为:
[0024]S2-1、循环获取字典的值和键;
[0025]S2-2、利用python字典的getattr函数配合以及异常处理机制判断结构体内的成员的名字是否和字典的键的名字相同,是,则利用python的isinstance函数判断键所对应的成员的值的类型,并依据对应关系将键所对应的成员的值赋值给成员;否,则继续结构体内下一成员的名字的判断。
[0026]优选的是,所述的python字典和结构体间的快速转换方法中,S2-1中,当循环获取的字典的值仍为字典时,则对获取的字典再次进行循环获取;当循环获取的字典的值为列表时,则继续循环列表中的元素,并根据元素属于的类型进行相应的赋值处理;当循环获取的字典的键在结构体中的类型是字符串时,则对数据直接进行赋值处理。
[0027]本专利技术至少包括以下有益效果:
[0028]本专利技术的python字典和结构体间的快速转换方法中,首先搭建python2.7以上的环境而后编写python转换文件,而后创建第一函数struct_to_dict和第二函数dict_to_
struct,通过调用struct_to_dict实现结构体转换字典,通过调用dict_to_struct函数实现字典赋值给结构体,即实现了采用统一的函数针对从字典自动赋值给结构体,结构体赋值给字典,而不用针对结构体里面每个元素单独操作,极大的提高了开发效率,增强了程序健壮性。
[0029]本专利技术的其它优点、目标和特征将部分通过下面的说明体现,部分还将通过对本专利技术的研究和实践而为本领域的技术人员所理解。
附图说明
[0030]图1为本专利技术所述的python字典和结构体间的快速转换方法的框架结构图。
具体实施方式
[0031]下面结合附图对本专利技术做进一步的详细说明,以令本领域技术人员参照说明书文字能够据以实施。
[0032]应当理解,本文所使用的诸如“具有”、“包含”以及“包括”术语并不排除一个或多个其它元件或其组合的存在或添加。
[0033]本专利技术提供一种python字典和结构体间的快速转换方法,包括以下步骤:...

【技术保护点】

【技术特征摘要】
1.一种python字典和结构体间的快速转换方法,其特征在于,包括以下步骤:S1、搭建python环境;S2、在所述python环境中构建一个转换文件;S3、在所述转换文件中创建用于字典和结构体相互转换的第一函数和第二函数;S4、利用待转换结构体定义实例M,对M进行赋值后,调用所述第一函数将赋值后的M转换为字典a,即实现结构体转换字典;S5、清空对M的赋值,调用所述第二函数将字典a内的值赋值给所述待转换结构体,即实现字典对结构体的赋值。2.如权利要求1所述的python字典和结构体间的快速转换方法,其特征在于,S4中调用所述第一函数将赋值后的M转换为字典a后,还需验证所述第一函数返回的结果是否正确,是,则转至S5;否,则重新创建所述第一函数;S5中调用所述第二函数将字典a内的值赋值给所述待转换结构体后,还需验证赋值后的待转换结构体内成员的值是否正确,是,则后续采用所述第一函数和第二函数实现字典和结构体相互转换;否,则重新创建所述第二函数。3.如权利要求1所述的python字典和结构体间的快速转换方法,其特征在于,S1中,所述python环境中包含python ctypes库。4.如权利要求1所述的python字典和结构体间的快速转换方法,其特征在于,字典的键和结构体的成员的名字一致时才能进行相互转换。5.如权利要求1所述的python字典和结构体间的快速转换方法,其特征在于,在相互转换前,需要按照赋值方式的不同将结构体内的成员的数据类型以及字典中所使用的数据类型分别进行分类,并在分类后的成员的数据类型和分类后的字典中所使用的数据类型间建立对应关系。6.如权利要求5所述的python字典和结构体间的快速转换方法,其特征在于,S3中,所述第一函数的构建方法具体为:S1-1、循环获取结构体内的所有成员,并依据分类后的成员的数据类型分别...

【专利技术属性】
技术研发人员:李杰
申请(专利权)人:远江盛邦北京网络安全科技股份有限公司
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1