这是我参与8月更文挑战的第11天,活动详情查看: 8月更文挑战
回顾复习
Python目前支持序列化的模块有三个,我们在前面已经学习
🗨️我们在回顾一下,序列化化反序列的过程
网络传输序列化和反序列化:
本地磁盘序列化和反序列化:
🕹️本期学习,我们将学习Python除了提供三个内置模块能对数据进行序列化操作第三库-MessagePack模块
今天又下大雨了☔️,带上耳机🎧、播放音乐🎼,开始今天的学习之旅💃💃💃~
1. 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模块序列化规则
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
复制代码
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))
复制代码
总结
本期,我们学习了Python对数据进行序列化和反序列化功能第三方模块-messagePack模块
MessagePack模块提供packb(),unpackb()等方法来对Python数据对象进行序列和反序列化。
若在工作中对序列化的数据空间有要求的,可以使用messagepack来对数据进行序列化处理
以上是本期内容,欢迎大佬们点赞评论ღ( ´・ᴗ・` )比心,下次见~💖💗💓
近期评论