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 27 Python
python检查指定文件是否存在的方法
Jul 06 Python
Python实现excel转sqlite的方法
Jul 17 Python
Python学习pygal绘制线图代码分享
Dec 09 Python
python 不以科学计数法输出的方法
Jul 16 Python
对python for 文件指定行读写操作详解
Dec 29 Python
python 对多个csv文件分别进行处理的方法
Jan 07 Python
使用python读取.text文件特定行的数据方法
Jan 28 Python
python for 循环获取index索引的方法
Feb 01 Python
pytorch 使用单个GPU与多个GPU进行训练与测试的方法
Aug 19 Python
python3.8下载及安装步骤详解
Jan 15 Python
python实现从ftp上下载文件的实例方法
Jul 19 Python
详解分布式系统中如何用python实现Paxos
May 18 #Python
如何在向量化NumPy数组上进行移动窗口
Python如何配置环境变量详解
Python打包为exe详细教程
Python基础之数据类型知识汇总
May 18 #Python
Python实战之疫苗研发情况可视化
Python打包exe时各种异常处理方案总结
You might like
PHP分页函数代码(简单实用型)
2010/12/02 PHP
PHP开发中四种查询返回结果分析
2011/01/02 PHP
PHP跨时区(UTC时间)应用解决方案
2013/01/11 PHP
PHP封装的一个支持HTML、JS、PHP重定向的多功能跳转函数
2014/06/19 PHP
JQuery 写的个性导航菜单
2009/12/24 Javascript
解读JavaScript中 For, While与递归的用法
2013/05/07 Javascript
使用ImageMagick进行图片缩放、合成与裁剪(js+python)
2013/09/16 Javascript
JS删除字符串中重复字符方法
2014/03/09 Javascript
JS实现自动变换的菜单效果代码
2015/09/09 Javascript
js中substr,substring,indexOf,lastIndexOf,split,replace的用法详解
2015/11/09 Javascript
jQuery ajax调用后台aspx后台文件的两种常见方法(不是ashx)
2016/06/28 Javascript
jQuery简单实现遍历单选框的方法
2017/03/06 Javascript
JS实现获取图片大小和预览的方法完整实例【兼容IE和其它浏览器】
2017/04/24 Javascript
ES6中参数的默认值语法介绍
2017/05/03 Javascript
bootstrap Table插件使用demo
2017/08/07 Javascript
JavaScript实现简易计算器小功能
2020/10/22 Javascript
动态实现element ui的el-table某列数据不同样式的示例
2021/01/22 Javascript
[01:19:54]DOTA2上海特级锦标赛主赛事日 - 2 败者组第二轮#1Alliance VS EHOME
2016/03/03 DOTA
[54:43]DOTA2-DPC中国联赛 正赛 CDEC vs Dynasty BO3 第一场 2月22日
2021/03/11 DOTA
Python实现简单的代理服务器
2015/07/25 Python
总结python实现父类调用两种方法的不同
2017/01/15 Python
利用pandas进行大文件计数处理的方法
2018/07/25 Python
python之消除前缀重命名的方法
2018/10/21 Python
使用Python实现跳帧截取视频帧
2019/05/31 Python
python制作简单五子棋游戏
2019/06/18 Python
Python统计时间内的并发数代码实例
2019/12/28 Python
PatPat德国:妈妈的每日优惠
2019/10/02 全球购物
六一儿童节主持词
2014/03/21 职场文书
大学生求职计划书
2014/04/30 职场文书
讲文明树新风演讲稿
2014/05/12 职场文书
小学竞选班长演讲稿
2014/09/09 职场文书
个人四风问题对照检查材料
2014/09/26 职场文书
2015年园林绿化工作总结
2015/05/23 职场文书
IDEA 链接Mysql数据库并执行查询操作的完整代码
2021/05/20 MySQL
详解PHP Swoole与TCP三次握手
2021/05/27 PHP
中国十大神话动漫电影排行榜 哪吒登顶 白蛇缘起排第七
2022/03/21 国漫