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实现根据IP地址和子网掩码算出网段的方法
Jul 30 Python
python 换位密码算法的实例详解
Jul 19 Python
python广度优先搜索得到两点间最短路径
Jan 17 Python
Python3实现的简单工资管理系统示例
Mar 12 Python
Python实现多态、协议和鸭子类型的代码详解
May 05 Python
Django认证系统实现的web页面实现代码
Aug 12 Python
Python从入门到精通之环境搭建教程图解
Sep 26 Python
JupyterNotebook设置Python环境的方法步骤
Dec 03 Python
tensorflow2.0与tensorflow1.0的性能区别介绍
Feb 07 Python
Pandas缺失值2种处理方式代码实例
Jun 13 Python
python求解汉诺塔游戏
Jul 09 Python
virtualenv隔离Python环境的问题解析
Jun 21 Python
详解分布式系统中如何用python实现Paxos
May 18 #Python
如何在向量化NumPy数组上进行移动窗口
Python如何配置环境变量详解
Python打包为exe详细教程
Python基础之数据类型知识汇总
May 18 #Python
Python实战之疫苗研发情况可视化
Python打包exe时各种异常处理方案总结
You might like
php使用glob函数遍历文件和目录详解
2016/09/23 PHP
微信公众号OAuth2.0网页授权问题浅析
2017/01/21 PHP
win7 wamp 64位 php环境开启curl服务遇到的问题及解决方法
2018/09/16 PHP
php和redis实现秒杀活动的流程
2019/07/17 PHP
jquery星级插件、支持页面中多次使用
2012/03/25 Javascript
有关javascript的性能优化 (repaint和reflow)
2013/04/12 Javascript
js获取当前月的第一天和最后一天的小例子
2013/11/18 Javascript
jQuery focus和blur事件的应用详解
2014/01/26 Javascript
jQuery中:focus选择器用法实例
2014/12/30 Javascript
js点击列表文字对应该行显示背景颜色的实现代码
2015/08/05 Javascript
Bootstrap所支持的表单控件实例详解
2016/05/16 Javascript
Vue.js组件tab实现选项卡切换
2020/03/23 Javascript
js实现移动端轮播图效果
2020/12/09 Javascript
vue项目使用axios发送请求让ajax请求头部携带cookie的方法
2018/09/26 Javascript
详解Vue+ElementUI从零开始搭建自己的网站(一、环境搭建)
2019/04/30 Javascript
three.js利用卷积法如何实现物体描边效果
2019/11/27 Javascript
javascript实现左右缓动动画函数
2020/11/25 Javascript
python基础教程之字典操作详解
2014/03/25 Python
用pywin32实现windows模拟鼠标及键盘动作
2014/04/22 Python
Python常用的内置序列结构(列表、元组、字典)学习笔记
2016/07/08 Python
Python制作刷网页流量工具
2017/04/23 Python
python爬虫系列Selenium定向爬取虎扑篮球图片详解
2017/11/15 Python
使用pygame模块编写贪吃蛇的实例讲解
2018/02/05 Python
Python函数返回不定数量的值方法
2019/01/22 Python
python实现全排列代码(回溯、深度优先搜索)
2020/02/26 Python
html5 利用canvas实现超级玛丽简单动画
2013/09/06 HTML / CSS
HTML5 Canvas入门学习教程
2016/03/17 HTML / CSS
Merrell迈乐澳大利亚网站:购买户外登山鞋
2017/05/28 全球购物
具有防紫外线功能的高性能钓鱼服装:Hook&Tackle
2018/08/16 全球购物
高中自我鉴定
2013/12/20 职场文书
银行服务感言
2014/03/01 职场文书
监督检查工作方案
2014/05/28 职场文书
作风整顿剖析材料
2014/09/30 职场文书
社区党的群众路线教育实践活动剖析材料
2014/10/09 职场文书
欠款纠纷起诉状
2015/05/19 职场文书
导游词之沈阳清昭陵
2019/12/28 职场文书