PythonMessagePack模块序列化

玩转Python

这是我参与8月更文挑战的第11天,活动详情查看: 8月更文挑战

回顾复习

Python目前支持序列化的模块有三个,我们在前面已经学习

  • 使用二进制协议对数据进行序列和反序列化操作-pickle模块
  • 对数据进行转换成JSON格式和反序列化操作-json模块
  • 使用类似字典键值对数据进行序列和反序列化操作-shelve模块

序列化模块

🗨️我们在回顾一下,序列化化反序列的过程

网络传输序列化和反序列化:

网络传输过程

本地磁盘序列化和反序列化:

本地文件保存

🕹️本期学习,我们将学习Python除了提供三个内置模块能对数据进行序列化操作第三库-MessagePack模块

今天又下大雨了☔️,带上耳机🎧、播放音乐🎼,开始今天的学习之旅💃💃💃~

1. MessagePack模块概述

⏳MessagePack是一个基于二进制高效的对象序列化类库,可用于跨语言通信

MessagePack 官网

MessagePack模块特点:

  • 与Json类似,在许多语言之间交换结构对象,对冒号、括号等无用的字符进行优化
  • 支持Python、Ruby、Java、C/C++等众多语言。
  • 兼容json和pickle

👉messagePack模块与Json模块结构对比

(1)json长度为27字节,

(2)MessagePack模块比json少9个字节,共18个字节

(3)9个字节包括:大括号、引号、冒号之类的来表示那些额外添加的无意义数据。

(4)MessagePack模块省去了特殊符号,用特定编码对各种类型进行定义,如下图所示:

messagePack与json

👉 MessagePack模块序列化规则

Pyhton数据类型转换成messagepack

Python数据类型 messagepack
array fixarray or array 16/32
str fixstr or str 8/16/32
int int 8/16/32/64 or uint 8/16/32/64
float float 32/64
True true
False false
Map fixmap or map 16/32

messagepack转换成Pyhton数据类型

messagepack Python数据类型
positive fixint, negative fixint, int 8/16/32/64 and uint 8/16/32/64 Integer
fixarray and array 16/32 array
fixstr and str 8/16/32 str
float 32/64 float
true True
false False
fixmap or map 16/32 Map

👉 在CMD命令窗口安装msgpack模块

 pip install msgpack
复制代码

安装msgpack库

2. MessagePack模块常用方法

方法 作用
msgpack.packb(obj) 序列化对象
msgpack.dumps(obj) 序列化对象
msgpack.unpackb(obj) 反序列化操作
msgpack.loads(obj) 反序列化操作
msgpack.pack(obj,file) 序列化对象保存到文件对象
msgpack.dump(obj,file) 序列化对象保存到文件对象
msgpack.unpack(obj,file) 反序列化对象保存到文件对象
msgpack.load(obj,file) 反序列化对象保存到文件对象

👑 因为messagepack兼容json和pickle,所以其也有dump、load等方法

3. 小试牛刀

Python第三方库messagepack模块较于json模块对无用的字符序列化进行优化。

我们来使用messagepack模块与json\进行实操一下:

import pickle,msgpack,json

dic = {"name":"juejin","age":12,"hpbby":"writing","language":"Python","isgirl":True,"add":None}
print("dic字节长度:",len(dic))

# json 序列化

js = json.dumps(dic)
print("json处理:--------------------")
print("JSON序列化:",js)
print(type(js),len(js),sep = "\n")


# pickle 序列化

pk = pickle.dumps(dic)

print("pickle处理-------------------------")
print("pickle序列化:",pk)
print(type(pk),len(pk),sep = "\n")


# msgpack 序列化

msg = msgpack.packb(dic)
print("msgack处理-------------------------")
print("msgpack序列化:",msg)
print(type(msg),len(msg),sep = "\n")

#msgpack反序列化

print("msgpack 反序列化:",msgpack.loads(msg))
print("msgpack 反序列化:",msgpack.unpackb(msg))
复制代码

messagepack运行结果

总结

本期,我们学习了Python对数据进行序列化和反序列化功能第三方模块-messagePack模块

MessagePack模块提供packb(),unpackb()等方法来对Python数据对象进行序列和反序列化。

若在工作中对序列化的数据空间有要求的,可以使用messagepack来对数据进行序列化处理

以上是本期内容,欢迎大佬们点赞评论ღ( ´・ᴗ・` )比心,下次见~💖💗💓