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获取标准北京时间的方法
Mar 24 Python
python实现向ppt文件里插入新幻灯片页面的方法
Apr 28 Python
利用python求相邻数的方法示例
Aug 18 Python
对numpy中轴与维度的理解
Apr 18 Python
python远程调用rpc模块xmlrpclib的方法
Jan 11 Python
Python实现的栈、队列、文件目录遍历操作示例
May 06 Python
django如何通过类视图使用装饰器
Jul 24 Python
Python实现自动访问网页的例子
Feb 21 Python
如何完美的建立一个python项目
Oct 09 Python
python安装第三方库如xlrd的方法
Oct 31 Python
Python+Appium实现自动化清理微信僵尸好友的方法
Feb 04 Python
利用 Python 的 Pandas和 NumPy 库来清理数据
Apr 13 Python
详解分布式系统中如何用python实现Paxos
May 18 #Python
如何在向量化NumPy数组上进行移动窗口
Python如何配置环境变量详解
Python打包为exe详细教程
Python基础之数据类型知识汇总
May 18 #Python
Python实战之疫苗研发情况可视化
Python打包exe时各种异常处理方案总结
You might like
PHP之短标签开启设置
2013/06/17 PHP
php 判断字符串编码是utf-8 或gb2312实例
2016/11/01 PHP
老生常谈php 正则中的i,m,s,x,e分别表示什么
2017/03/02 PHP
ThinkPHP+EasyUI之ComboTree中的会计科目树形菜单实现方法
2017/06/09 PHP
推荐10个超棒的jQuery工具提示插件
2011/10/11 Javascript
Extjs grid panel自带滚动条失效的解决方法
2014/09/11 Javascript
js调试工具Console命令详解
2014/10/21 Javascript
jQuery点缩略图弹出层显示大图片
2015/02/13 Javascript
jQuery中通过ajax调用webservice传递数组参数的问题实例详解
2016/05/20 Javascript
详解JavaScript中的事件流和事件处理程序
2016/05/20 Javascript
Vue.js 2.0窥探之Virtual DOM到底是什么?
2017/02/10 Javascript
BootStrap的两种模态框方式
2017/05/10 Javascript
js核心基础之构造函数constructor用法实例分析
2019/05/11 Javascript
[56:48]FNATIC vs EG 2019国际邀请赛小组赛 BO2 第二场 8.15
2019/08/16 DOTA
简单解决Python文件中文编码问题
2015/11/22 Python
Python语言的变量认识及操作方法
2018/02/11 Python
python检索特定内容的文本文件实例
2018/06/05 Python
python的pytest框架之命令行参数详解(下)
2019/06/27 Python
Python动态语言与鸭子类型详解
2019/07/01 Python
python实现基于朴素贝叶斯的垃圾分类算法
2019/07/09 Python
python+selenium 点击单选框-radio的实现方法
2019/09/03 Python
Python列表删除元素del、pop()和remove()的区别小结
2019/09/11 Python
python 解决tqdm模块不能单行显示的问题
2020/02/19 Python
python字典的值可以修改吗
2020/06/29 Python
详解Python中的路径问题
2020/09/02 Python
python不同版本的_new_不同点总结
2020/12/09 Python
html5小程序飞入购物车(抛物线绘制运动轨迹点)
2020/10/19 HTML / CSS
Lookfantastic瑞典:英国知名美妆购物网站
2018/04/06 全球购物
巴西体育用品商店:Lojão dos Esportes
2018/07/21 全球购物
Kivari官网:在线购买波西米亚服装
2018/10/29 全球购物
妇科医生自荐信
2013/11/05 职场文书
教师先进工作者事迹材料
2014/05/01 职场文书
乡镇党的群众路线教育实践活动制度建设计划
2014/11/03 职场文书
小学生思想品德评语
2014/12/31 职场文书
公司员工辞职信范文
2015/05/12 职场文书
创业计划书之便利店
2019/09/05 职场文书