数据表格明文转换为便于程序可读取的二进制密文的方法

文档序号:700993 发布日期:2021-04-13 浏览:1次 >En<

阅读说明:本技术 数据表格明文转换为便于程序可读取的二进制密文的方法 (Method for converting data table plaintext into binary ciphertext convenient for program to read ) 是由 赵晓丽 于 2020-08-28 设计创作,主要内容包括:本发明公开了数据表格明文转换为便于程序可读取的二进制密文的方法,该发明提供的方法需要和Google提供的开源的Protobuf(版本3.11.x)结合,基于跨平台的编程语言Python。Protobuf是Google提供的一种开源的数据定义格式,使用Protobuf可以将数据表的每个列映射到Protobuf中定义的数据结构中的指定字段,程序中读取转换后的二进制文件,将其转换为对应Protobuf的数据结构类型的数组,对该数组操作,可以进行主键、最大值、最小值等数据表中隐含的数据进行封装操作,也无需再通过读取Excel文件按行号和列号进行数据访问,直接可以通过映射的数据结构的成员进行访问,提高了代码可读性和开发效率。(The invention discloses a method for converting a data table plaintext into a binary ciphertext convenient for program reading, which is combined with open source Protobuf (version 3.11.x) provided by Google and is based on a cross-platform programming language Python. Protobuf is an open-source data definition format provided by Google, each column of a data table can be mapped to a specified field in a data structure defined in Protobuf by using the Protobuf, a converted binary file is read in a program and converted into an array corresponding to the data structure type of the Protobuf, and the array can be operated, so that the data implicit in the data table such as a main key, a maximum value, a minimum value and the like can be packaged, and data access can be directly performed through reading an Excel file according to a row number and a column number, so that the code readability and the development efficiency are improved.)

数据表格明文转换为便于程序可读取的二进制密文的方法

技术领域

本发明涉及程序读取Excel数据表(xlsx,csv等)中的数据的方法,具体是数据表格明文转换为便于程序可读取的二进制密文的方法。

背景技术

现有的程序读取Excel数据表(xlsx,csv等)中的数据的方法比较杂乱,因为不同的编程语言对于读取Excel数据表方法不同。

例如如针对于C++编程语言,在Windows平台下,可以使用ODBC访问指定的Excel文件,也可以通过Excel提供的COM对象访问指定的Excel文件;首先创建ODBC或者COM对象,打开文件,创建Excel对象,访问数据的方式则是通过行号和列号进行访问。在非Windows平台下,例如Linux下,需要安装第三方库libxls,使用方法和Windows平台下类似。再例如如针对于Java编程语言,因为Java是跨平台的编程语言,所以不涉及Windows和非Windows平台。常用的一个方法是引用Apache POI相关的类库,实现解析指定Excel内容的方法Parser,实现读取Excel的方法Reader,然后通过Reader读取Excel文件,返回一个结果集。

现在针对于不同编程语言和不同平台的读取Excel文件的方法,都是通过对应的Excel提供的库,对Excel文件解析,但是对于访问单元数据上面,则都是通过行和列进行访问;这样对于程序开发过程中,相对的比较死板,会产生大量的硬编码,如果Excel的行和列变换了,则程序代码也需要进行相应的变更;如果将这些数据表文件打包入到对应的应用程序中,则是一种明文的存在,对于应用程序的安全也有一定的危险。因此,现有的主流的程序读取Excel数据的方法,针对于需求方和开发方,都不是一个很友好的方式。因此,本发明提供了数据表格明文转换为便于程序可读取的二进制密文的方法,以解决上述背景技术中提出的问题。

发明内容

本发明的目的在于提供数据表格明文转换为便于程序可读取的二进制密文的方法,以解决上述背景技术中提出的问题。

为实现上述目的,本发明提供如下技术方案:

数据表格明文转换为便于程序可读取的二进制密文的方法,其步骤如下:

1)、将数据表传入Python程序,通过数据表名字找到对应的数据接口的Class,通过xlrd将数据表内容读取到程序中,声明一个空数组List,用于存放从数据表转换为Class的对象;

2)、遍历数据表的内容,如果数据表无内容,跳转到步骤7),如果数据表有内容,从数据表的第三行开始遍历(第一行是自定义表头,第二行是该列数据和Protobuf定义的数据结构的映射名字);

3)、得到一行的数据后,声明一个Class的对象Ins,继续从第1列开始遍历这行数据,得到一个单元格信息后,得到当前单元格所在列的第二行数据Field,并且得到该单元格的数据Value,Field即为数据表和数据结构映射的字段名称;

4)、如果Field中不含中括号,将Ins中该Field的类型获得,并且将该单元格数据Value转换为对应类型的ValueMod;将Ins中该Field对应的成员赋值为ValueMod,如果Field中含有中括号,说明该单元格数据为数据表中的一段连续数据的一项,对应到数据结构中为一个数组;得到该Field在Ins中对应的数组的数据类型,将Value转换为对应类型的ValueModR,将ValueModR添加到Field在Ins中对应的数组类型成员的尾部;

5)、该行数据遍历完成后,得到一个完整的数据映射对象Ins,将Ins添加到List数组的尾部,然后继续按行遍历数据表内容;

6)、数据表遍历完成后,将得到的Class对象的数组List返回,用于二进制化并写入文件使用;

7)、遍历返回的Class对象数组List;

8)、List中每个成员是Class类型(即Protobuf对应的Python类型)的对象,该对象含有一个方法SerializeToString,该方法将对象序列化为二进制字符串。将对象序列化为一个二进制字符串BinStr,得到BinStr的长度Len,将Len(长度4个字节)写入文件,继续将BinStr写入文件;

9)、List遍历完成后,数据表转换为密文后也写入到了二进制文件中,该程序结束。

作为本发明进一步的方案:数据表的内容需要从第三行开始,第二行的数据是数据表的列和数据结构之间的映射的字段名称。

作为本发明再进一步的方案:数据结构的定义名和数据表的定义名需要一致。

作为本发明再进一步的方案:数据结构中定义的类型和数据表中映射的数据之间,在进行解析的时候,需要进行类型的转换。

作为本发明再进一步的方案:在将一行数据转换成的二进制写入文件中前,需要将该二进制的长度先于二进制字符串写入文件。

与现有技术相比,本发明的有益效果是:

1、在对Excel进行数据读取的时候,无需通过行号和列号对数据进行访问,减少开发过程中数据表变化导致的编码的变动,提高了代码的可读性,增加了开发效率。

2、数据表在应用程序打包的时候,明文的数据表变成了密文的二进制格式,对于应用程序的安全性也有所提高。

3、需求方在提供数据表的时候,无需再详细的解释每一列的含义,只需将每一列的映射关系进行说明即可,数据表的列的顺序也无需再强制定义;开发方则只用对转换后的文件解析后,操作对象的成员即可进行数据表的处理,减少了需求方和开发方的沟通成本。

附图说明

图1为数据表格明文转换为便于程序可读取的二进制密文的方法的客户信息数据表图。

图2为数据表格明文转换为便于程序可读取的二进制密文的方法的流程图。

具体实施方式

下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。

本发明实施例中,数据表格明文转换为便于程序可读取的二进制密文的方法,需要和Google提供的开源的Protobuf(版本3.11.x)结合,基于跨平台的编程语言Python,Protobuf是Google提供的一种开源的数据定义格式,使用Protobuf可以将数据表的每个列映射到Protobuf中定义的数据结构中的指定字段,需要使用Python提供的第三方库xlrd(版本1.1.0),用于解析Excel的数据表。

参阅图1,现有一张Excel数据表,文件名为CorporateCustomer.xlsx,该数据表记录了某公司的客户的信息,使用Protobuf定义CorporateCustomer数据表的数据结构,定义的数据结构名字和数据表的名字需要一致,通过Google提供的工具将数据结构定义生成对应的Python定义。

CorporateCustomer.proto,公司客户信息数据表的数据结构定义文件:

数据表的数据是从第三行开始进行记录,第一行为自定义的表头,第二行则为数据表的列和Protobuf定义的数据结构之间的映射关系。

参阅图2,数据表转换为便于程序读取的二进制密文的文件格式,其步骤如下:

1)、将数据表传入Python程序,通过数据表名字找到对应的数据接口的Class,通过xlrd将数据表内容读取到程序中,声明一个空数组List,用于存放从数据表转换为Class的对象;

2)、遍历数据表的内容,如果数据表无内容,跳转到步骤7),如果数据表有内容,从数据表的第三行开始遍历(第一行是自定义表头,第二行是该列数据和Protobuf定义的数据结构的映射名字);

3)、得到一行的数据后,声明一个Class的对象Ins,继续从第1列开始遍历这行数据,得到一个单元格信息后,得到当前单元格所在列的第二行数据Field,并且得到该单元格的数据Value,Field即为数据表和数据结构映射的字段名称;

4)、如果Field中不含中括号,将Ins中该Field的类型获得,并且将该单元格数据Value转换为对应类型的ValueMod;将Ins中该Field对应的成员赋值为ValueMod,如果Field中含有中括号,说明该单元格数据为数据表中的一段连续数据的一项,对应到数据结构中为一个数组;得到该Field在Ins中对应的数组的数据类型,将Value转换为对应类型的ValueModR,将ValueModR添加到Field在Ins中对应的数组类型成员的尾部;

5)、该行数据遍历完成后,得到一个完整的数据映射对象Ins,将Ins添加到List数组的尾部,然后继续按行遍历数据表内容;

6)、数据表遍历完成后,将得到的Class对象的数组List返回,用于二进制化并写入文件使用;

7)、遍历返回的Class对象数组List;

8)、List中每个成员是Class类型(即Protobuf对应的Python类型)的对象,该对象含有一个方法SerializeToString,该方法将对象序列化为二进制字符串。将对象序列化为一个二进制字符串BinStr,得到BinStr的长度Len,将Len(长度4个字节)写入文件,继续将BinStr写入文件;

9)、List遍历完成后,数据表转换为密文后也写入到了二进制文件中,该程序结束。

该方法是通过Python提供一个文件转换的过程,数据表转换密文二进制的部分代码如下:

密文二进制读取解析的算法代码如下:

程序中读取转换后的二进制文件,将其转换为对应Protobuf的数据结构类型的数组,对该数组操作,可以进行主键、最大值、最小值等数据表中隐含的数据进行封装操作,也无需再通过读取Excel文件按行号和列号进行数据访问,直接可以通过映射的数据结构的成员进行访问,提高了代码可读性和开发效率。

该发明的实施方式:

1、语言环境Python,需要安装的库,protobuf(版本3.11.2),xlrd(版本1.1.0);

2、安装Protobuf的工具protoc(版本3.11.2);

3、定义数据表映射的Protobuf的数据结构;

4、通过Protobuf的工具protoc生成数据结构的Python的类型;

5、执行Python程序,引入protobuf库,xlrd库,生成的数据结构定义的类。将数据表文件通过参数传入程序,将生成的二进制文件路径传入程序;

6、程序执行,解析数据表,生成密文二进制文件。

以上所述,仅为本发明较佳的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,根据本发明的技术方案及其发明构思加以等同替换或改变,都应涵盖在本发明的保护范围之内。

13页详细技术资料下载
上一篇:一种医用注射器针头装配设备
下一篇:文档配图确定方法、装置、电子设备及存储介质

网友询问留言

已有0条留言

还没有人留言评论。精彩留言会获得点赞!

精彩留言,会给你点赞!