Python使用protobuf序列化和反序列化的实现
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)
运行结果
上面序列化和反序列化代码结果运行如下:
(资源库 www.zyku.net)
原文链接:https://blog.csdn.net/CatchLight/article/details/116987299
上一篇:Python 内置函数速查表一览
栏 目:Python教程
本文标题:Python使用protobuf序列化和反序列化的实现
本文地址:https://www.zyku.net/python/9699.html
您可能感兴趣的文章
- 11-22帝国cms限制登录次数不得超过5次的解
- 01-12果果照片合成器-果果照片合成器应用软
- 01-10建行学习-建行学习应用软件功能介绍
- 08-11keep如何绑定跑步机
- 07-05Linux arpwatch命令
- 12-27百师教育网-百师教育网应用软件功能介
- 03-11帝国CMS不同的字段值显示不同的图片使
- 12-08苹果13如何进行定时拍照
- 02-23DedeCMS内容页调用当前栏目名称及链接
- 03-22华为matex2开启悬浮球功能教程
- 01-02航航儿童拼音-航航儿童拼音应用软件功
- 06-03nginx反向代理导致session失效的问题
- 01-08万能手机遥控-万能手机遥控应用软件功
- 03-16详解centos7配置本地yum源的方法
- 03-15opporeno6关闭拨号提示声步骤
- 09-07BAT获取时间有空格问题的解决方法
- 02-20真我V11开启微信视频美颜功能教程
- 12-28中博银行从业考试-中博银行从业考试应
- 12-07鸿蒙系统怎样进行镜子测肤
- 04-24PHP 获取当前使用的域名和文件位置
最近更新
阅读排行
猜你喜欢
- 03-04小米手机开启免打扰模式教程
- 01-09致用物理-致用物理应用软件功能介绍
- 09-16小米手机怎么查看行车记录仪视频
- 01-14小米耳机air2pro怎么连接苹果手机
- 11-19企业微信怎么互通微信消息
- 07-28帝国CMS7.5版后台信息发布限制可设置
- 03-02小米11ultra更新系统教程
- 01-13织梦DedeCMS在实现中英文导航功能方法
- 07-04真我gtneo2打开NFC功能方法
- 10-18哔哩哔哩订阅番剧在哪里看