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获得图片base64编码示例
Jan 16 Python
python和shell实现的校验IP地址合法性脚本分享
Oct 23 Python
Python爬虫之正则表达式基本用法实例分析
Aug 08 Python
在ubuntu16.04中将python3设置为默认的命令写法
Oct 31 Python
在python中以相同顺序shuffle两个list的方法
Dec 13 Python
python操作文件的参数整理
Jun 11 Python
python读取与处理netcdf数据方式
Feb 14 Python
vue常用指令代码实例总结
Mar 16 Python
Python基于百度AI实现OCR文字识别
Apr 02 Python
详解查看Python解释器路径的两种方式
Oct 15 Python
解决pytorch 损失函数中输入输出不匹配的问题
Jun 05 Python
python 中的jieba分词库
Nov 23 Python
详解分布式系统中如何用python实现Paxos
May 18 #Python
如何在向量化NumPy数组上进行移动窗口
Python如何配置环境变量详解
Python打包为exe详细教程
Python基础之数据类型知识汇总
May 18 #Python
Python实战之疫苗研发情况可视化
Python打包exe时各种异常处理方案总结
You might like
雄兵连三大错觉:凯莎没了,凉冰阵亡了,华烨觉得自己又行了
2020/04/09 国漫
PHP 作用域解析运算符(::)
2010/07/27 PHP
PHP小技巧之函数重载
2014/06/02 PHP
PHP中is_file()函数使用指南
2015/05/08 PHP
关于PHP中interface的用处详解
2020/07/26 PHP
JavaScript入门教程(5) js Screen屏幕对象
2009/01/31 Javascript
javscript对象原型的一些看法
2010/09/19 Javascript
JavaScript通过使用onerror设置默认图像显示代替alt
2016/03/01 Javascript
jQuery 如何给Carousel插件添加新的功能
2016/04/18 Javascript
Javascript计算二维数组重复值示例代码
2016/12/18 Javascript
使用BootStrap建立响应式网页——通栏轮播图(carousel)
2016/12/21 Javascript
Bootstrap 表单验证formValidation 实现表单动态验证功能
2017/05/17 Javascript
AngularJS解决ng-if中的ng-model值无效的问题
2017/06/21 Javascript
纯html+css+javascript实现楼层跳跃式的页面布局(实例代码)
2017/10/25 Javascript
微信小程序使用video组件播放视频功能示例【附源码下载】
2017/12/08 Javascript
vue-cli webpack 引入jquery的方法
2018/01/10 jQuery
php结合js实现多条件组合查询
2019/05/28 Javascript
Python中方法链的使用方法
2016/02/23 Python
详解python的数字类型变量与其方法
2016/11/20 Python
python导入csv文件出现SyntaxError问题分析
2017/12/15 Python
python方法生成txt标签文件的实例代码
2018/05/10 Python
对numpy中的where方法嵌套使用详解
2018/10/31 Python
Python迭代器模块itertools使用原理解析
2019/12/11 Python
TensorFlow tf.nn.max_pool实现池化操作方式
2020/01/04 Python
TensorFlow实现指数衰减学习率的方法
2020/02/05 Python
给Django Admin添加验证码和多次登录尝试限制的实现
2020/07/26 Python
建筑设计所实习生自我鉴定
2013/09/25 职场文书
幼师专业求职推荐信
2013/11/08 职场文书
董事长岗位职责
2013/11/30 职场文书
打架检讨书2000字
2014/02/22 职场文书
教师一岗双责责任书
2014/04/16 职场文书
市政管理求职信范文
2014/05/07 职场文书
土地租赁意向书
2014/07/30 职场文书
医药销售自我评价200字
2014/09/11 职场文书
工作失误检讨书(经典集锦版)
2014/10/17 职场文书
2014年办公室文秘工作总结
2014/12/09 职场文书