msgpack是一种高效的二进制序列化格式,比JSON更小更快,适用于网络通信和缓存存储。通过pip install msgpack安装,使用packb()/unpackb()进行内存中数据的序列化与反序列化,支持dict、list、str、int等基本类型。可使用dump()/load()操作文件对象实现持久化存储。对于datetime等不支持的类型,可通过default和ext_hook参数自定义编码解码逻辑。注意默认情况下字符串key可能被转为bytes,需设置raw=False以保持为str类型。msgpack性能优越,适合在内部系统间高效传输数据。

msgpack 是一种高效的二进制序列化格式,比 JSON 更小、更快。Python 中通过 msgpack 库实现对象的打包与解包。它适用于需要高性能数据交换的场景,比如网络通信、缓存存储等。
安装 msgpack
使用 pip 安装 msgpack Python 库:
pip install msgpack
注意:包名是 msgpack,但在代码中导入时写为 msgpack(不是 msgpack-python 或其他变体)。
基本序列化与反序列化
msgpack 支持常见 Python 数据类型:dict、list、str、int、float、bool 和 None。
立即学习“Python免费学习笔记(深入)”;
示例:打包和解包基本数据
import msgpack
# 要序列化的数据
data = {
‘name’: ‘Alice’,
‘age’: 30,
‘is_student’: False,
‘hobbies’: [‘reading’, ‘coding’]
}
# 序列化为字节
packed_data = msgpack.packb(data)
print(packed_data) # 输出二进制数据
# 反序列化
unpacked_data = msgpack.unpackb(packed_data)
print(unpacked_data) # 输出原始数据结构
packb() 将对象转为字节串,unpackb() 将字节串还原。
处理文件读写
可以将数据直接写入文件或从文件读取,避免内存中保留完整字节串。
写入文件:
with open(‘data.msgpack’, ‘wb’) as f:
msgpack.dump(data, f)
读取文件:
with open(‘data.msgpack’, ‘rb’) as f:
loaded_data = msgpack.load(f)
dump() 和 load() 用于文件对象操作,功能类似于 pickle 或 json 模块的对应方法。
处理不支持的类型(如 datetime)
msgpack 不原生支持 datetime、自定义类等复杂类型,但可以通过扩展方式处理。
使用 ext hooks 示例:
import msgpack
from datetime import datetime
def custom_encoder(obj):
if isinstance(obj, datetime):
return msgpack.ExtType(1, obj.isoformat().encode(‘utf-8’))
raise TypeError(f”Unknown type: {type(obj)}”)
def custom_decoder(code, data):
if code == 1:
return datetime.fromisoformat(data.decode(‘utf-8’))
return msgpack.ExtType(code, data)
# 使用编码器和解码器
now = datetime.now()
packed = msgpack.packb(now, default=custom_encoder)
restored = msgpack.unpackb(packed, ext_hook=custom_decoder)
print(restored)
default 参数用于自定义序列化逻辑,ext_hook 处理解包时的扩展类型。
注意事项
msgpack 会将字符串转为 bytes 类型进行存储,在 Python 3 中需注意 str 与 bytes 的区别。
默认情况下,unpackb 返回的 key 如果是字符串,可能在某些模式下被转为 bytes,可通过设置 raw=False 控制:
data = msgpack.unpackb(packed_data, raw=False)
这会让字符串 key 保持为 str 类型。
基本上就这些。msgpack 使用简单,性能高,适合替代 JSON 在内部系统间传递数据。注意类型兼容性和编码设置即可正常使用。
以上就是Python中msgpack库如何使用?的详细内容,更多请关注创想鸟其它相关文章!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1383024.html
微信扫一扫
支付宝扫一扫