Python如何实现序列化和反序列化
发表于:2025-01-16 作者:千家信息网编辑
千家信息网最后更新 2025年01月16日,本文小编为大家详细介绍"Python如何实现序列化和反序列化",内容详细,步骤清晰,细节处理妥当,希望这篇"Python如何实现序列化和反序列化"文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一
千家信息网最后更新 2025年01月16日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安全错误
数据库的锁怎样保障安全
数据库用户表有什么属性
国家推进网络安全的
网络技术与安全实训
郑州易好网络技术有限公司
回头视频软件开发
网络技术及信息检索 教材
网咖英雄联盟无法连接到服务器
公安厅软件开发岗
数据库与前端不一致
组建网络安全应急队伍怎么写
文件路径 数据库
大学智慧芽数据库
软件开发应该看哪些英语
scau数据库系统综合性实验
宁波捅了马峰窝网络技术有限公司
阿里云 网络安全法
租赁服务器怎么登陆
网络安全架构图360
阿里云服务器无法远程连接
绿盟数据库防火墙用户手册
金华企业网络安全准入控制哪家好
计算机网络技术在日常的应用
数据库账户拆分
网络安全和网络舆情的关系
怎么用wps自动填充数据库
贵金属行情软件开发
奥丁神叛服务器太忙了
网络安全检查入侵行为
和平精英在哪里看服务器的房间
用友 用什么数据库