Python使用protobuf序列化和反序列化的实现


Posted in Python onMay 19, 2021

protobuf介绍

protobuf是一种二进制的序列化格式,相对于json来说体积更小,传输更快。

安装protobuf

安装protobuf的目的主要用来将proto文件编译成python、c、Java可调用的接口。

# 如果gcc版本较低,需要升级gcc
wget https://main.qcloudimg.com/raw/d7810aaf8b3073fbbc9d4049c21532aa/protobuf-2.6.1.tar.gz
tar -zxvf protobuf-2.6.1.tar.gz -C /usr/local/ && cd /usr/local/protobuf-2.6.1
./configure 
make && make install
# 可以在/etc/profile或者~/.bash_profile末尾设置永久有效
export PATH=$PATH:/usr/local/protobuf-2.6.1/bin

使用下面命令查看是否安装成功。

[root@CodeOnTheRoad ~]# protoc --version
libprotoc 2.6.1

构建python接口

创建cls.proto文件,定义序列化结构:

package cls;

message Log
{
    message Content
    {
        required string key   = 1; // 每组字段的 key
        required string value = 2; // 每组字段的 value
    }
    required int64   time     = 1; // 时间戳,UNIX时间格式
    repeated Content contents = 2; // 一条日志里的多个kv组合
}

message LogTag
{
    required string key       = 1;
    required string value     = 2;
}

message LogGroup
{
    repeated Log    logs        = 1; // 多条日志合成的日志数组
    optional string contextFlow = 2; // 目前暂无效用
    optional string filename    = 3; // 日志文件名
    optional string source      = 4; // 日志来源,一般使用机器IP
    repeated LogTag logTags     = 5;
}

message LogGroupList
{
    repeated LogGroup logGroupList = 1; // 日志组列表
}

只用下面命令将proto文件转换为python可调用的接口。

protoc cls.proto --python_out=./

执行完后,在此目录下生成cls_pb2.py。

序列化

import cls_pb2 as cls
import time

# 构建protoBuf日志内容
LogLogGroupList = cls.LogGroupList()

LogGroup = LogLogGroupList.logGroupList.add()
LogGroup.contextFlow = "1"
LogGroup.filename = "python.log"
LogGroup.source = "localhost"

LogTag = LogGroup.logTags.add()
LogTag.key = "key"
LogTag.value = "value"

Log = LogGroup.logs.add()
Log.time = int(round(time.time() * 1000000))

Content = Log.contents.add()
Content.key = "Hello"
Content.value = "World"
print(LogLogGroupList)
# 序列化
data = LogLogGroupList.SerializeToString()
print(data)

其实就是讲一个protobuf的结构文本序列化成了二进制的形式。

反序列化

反序列化就是将二进制转换成protobuf结构。

# 反序列化
LogLogGroupList = cls.LogGroupList()
LogLogGroupList.ParseFromString(data)
print(LogLogGroupList)

运行结果

上面序列化和反序列化代码结果运行如下:

Python使用protobuf序列化和反序列化的实现

到此这篇关于Python使用protobuf序列化和反序列化的实现的文章就介绍到这了,更多相关Python 序列化和反序列化内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
python实现决策树分类算法
Dec 21 Python
VSCode下配置python调试运行环境的方法
Apr 06 Python
python实现关键词提取的示例讲解
Apr 28 Python
Python统计python文件中代码,注释及空白对应的行数示例【测试可用】
Jul 25 Python
Python Numpy:找到list中的np.nan值方法
Oct 30 Python
对python当中不在本路径的py文件的引用详解
Dec 15 Python
用Python配平化学方程式的方法
Jul 20 Python
使用OpenCV实现仿射变换—旋转功能
Aug 29 Python
python使用PIL和matplotlib获取图片像素点并合并解析
Sep 10 Python
在echarts中图例legend和坐标系grid实现左右布局实例
May 16 Python
弄清Pytorch显存的分配机制
Dec 10 Python
python实现层次聚类的方法
Nov 01 Python
详解分布式系统中如何用python实现Paxos
May 18 #Python
如何在向量化NumPy数组上进行移动窗口
Python如何配置环境变量详解
Python打包为exe详细教程
Python基础之数据类型知识汇总
May 18 #Python
Python实战之疫苗研发情况可视化
Python打包exe时各种异常处理方案总结
You might like
PHP 和 MySQL 基础教程(二)
2006/10/09 PHP
php将12小时制转换成24小时制的方法
2015/03/31 PHP
php实现面包屑导航例子分享
2015/12/19 PHP
php数组遍历类与用法示例
2019/05/24 PHP
js过滤数组重复元素的方法
2010/09/05 Javascript
利用CSS、JavaScript及Ajax实现高效的图片预加载
2013/10/16 Javascript
JS阻止冒泡事件以及默认事件发生的简单方法
2014/01/17 Javascript
解决用jquery load加载页面到div时,不执行页面js的问题
2014/02/22 Javascript
解决自定义$(id)的方法与jquery选择器$冲突的问题
2014/06/14 Javascript
Javascript获取CSS伪元素属性的实现代码
2014/09/28 Javascript
AngularJS中取消对HTML片段转义的方法例子
2015/01/04 Javascript
JQuery中serialize()用法实例分析
2015/02/06 Javascript
JS访问SWF的函数用法实例
2015/07/01 Javascript
Vue的百度地图插件尝试使用
2017/09/06 Javascript
vue项目总结之文件夹结构配置详解
2017/12/13 Javascript
vue项目中axios使用详解
2018/02/07 Javascript
解决Vue使用swiper动态加载数据,动态轮播数据显示白屏的问题
2018/09/27 Javascript
Node.js 如何利用异步提升任务处理速度
2019/01/07 Javascript
js的各种数据类型判断的介绍
2019/01/19 Javascript
ES6知识点整理之函数数组参数的默认值及其解构应用示例
2019/04/17 Javascript
原生JS实现随机点名项目的实例代码
2019/04/30 Javascript
利用js实现简易红绿灯
2020/10/15 Javascript
win10系统中安装scrapy-1.1
2016/07/03 Python
利用python实现简易版的贪吃蛇游戏(面向python小白)
2018/12/30 Python
keras model.fit 解决validation_spilt=num 的问题
2020/06/19 Python
python简单实现9宫格图片实例
2020/09/03 Python
数控技术应届生求职信
2013/11/13 职场文书
爱心捐助倡议书
2014/05/19 职场文书
学习党的群众路线教育实践活动剖析材料
2014/10/13 职场文书
党小组鉴定意见
2015/06/02 职场文书
社会实践单位意见
2015/06/05 职场文书
海底两万里读书笔记
2015/06/26 职场文书
初中体育教学随笔
2015/08/15 职场文书
python实现简单石头剪刀布游戏
2021/10/24 Python
python基础之函数的定义和调用
2021/10/24 Python
Javascript 解构赋值详情
2021/11/17 Javascript