Python如何实现序列化和反序列化
发表于:2025-02-23 作者:千家信息网编辑
千家信息网最后更新 2025年02月23日,本文小编为大家详细介绍"Python如何实现序列化和反序列化",内容详细,步骤清晰,细节处理妥当,希望这篇"Python如何实现序列化和反序列化"文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一
千家信息网最后更新 2025年02月23日Python如何实现序列化和反序列化protobuf介绍
安装protobuf
构建python接口
序列化
反序列化
本文小编为大家详细介绍"Python如何实现序列化和反序列化",内容详细,步骤清晰,细节处理妥当,希望这篇"Python如何实现序列化和反序列化"文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。
我们前后端进行交互的时候可以使用JSON进行交互,但是python应用和python应用之间如果使用JSON来传递数据是一种浪费的行为(JSON传递的信息有限)这个时候我们可以通过protobuf库来将python对象序列化,然后变成二进制数据传输,最后再进行python反序列化得到这个对象。
protobuf介绍
protobuf是一种二进制的序列化格式,相对于json来说体积更小,传输更快。
安装protobuf
安装protobuf的目的主要用来将proto文件编译成python、c、Java可调用的接口。
# 如果gcc版本较低,需要升级gccwget https://main.qcloudimg.com/raw/d7810aaf8b3073fbbc9d4049c21532aa/protobuf-2.6.1.tar.gztar -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 --versionlibprotoc 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 clsimport 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如何实现序列化和反序列化"文章已经介绍完毕,想要掌握这篇文章的知识点还需要大家自己动手实践使用过才能领会,如果想了解更多相关内容的文章,欢迎关注行业资讯频道。
序列
日志
二进制
文件
内容
接口
文章
结构
命令
字段
对象
就是
数据
时候
时间
格式
可调
传输
应用
妥当
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
数据库中的all是什么意思
2008的数据库怎么恢复
老年机出现连接服务器失败
上海博科软件开发
中外文数据库有哪些特点
数据库有哪些数据安全性限制
数据库语言程序设计心得
苏州品牌网络技术服务费
传奇为什么找不到原来的服务器
16岁学软件开发最快方法
jsp数据库怎么加入
新罗区骁嘉波网络技术服务部
能不能通过云服务器玩游戏
邯郸软件开发互动平台哪里好
中国水稻数据库中心龙稻31
万方数据库论文无法检索
合肥网络技术
数值中取最小数据库
软件开发会影响发展吗
网络安全宣传周电信日主题班会
乡镇网络安全管理制度制度
上海博科软件开发
两会加强网络安全
web程序发布到服务器的流程
聊天软件开发平台
excel表怎么变成数据库
免费云服务器永久使用推荐
商丘软件开发优缺点
计算机网络技术维护大全
数据库原理应用练习题答案