如何使用msgpack进行读写操作?

24

我该如何使用msgpack将字典data进行序列化/反序列化操作?

1个回答

51
我会尽力帮忙翻译。以下是您需要翻译的内容:

Python文档似乎不太好,所以这里是我的尝试。

安装

pip install msgpack

读写msgpack

#!/usr/bin/env python
# -*- coding: utf-8 -*-
import msgpack

# Define data
data = {
    "a list": [1, 42, 3.141, 1337, "help"],
    "a string": "bla",
    "another dict": {"foo": "bar", "key": "value", "the answer": 42},
}

# Write msgpack file
with open("data.msgpack", "wb") as outfile:
    packed = msgpack.packb(data)
    outfile.write(packed)

# Read msgpack file
with open("data.msgpack", "rb") as data_file:
    byte_data = data_file.read()

data_loaded = msgpack.unpackb(byte_data)
print(data == data_loaded)

替代方案

对于您的应用程序,以下可能很重要:
  • 其他编程语言的支持
  • 读/写性能
  • 紧凑性(文件大小)

另请参见:数据序列化格式比较

如果您更想找一种制作配置文件的方法,您可能想阅读我的短文 Python中的配置文件


2
我们现在只使用pip install msgpack。根据pypi,msgpack-python已经过时了。 - A A Ron
4
msgpack文件的推荐扩展名是什么? 建议使用“.msgpack”作为文件的扩展名。 - Tedo Vrbanec
对于我来说,当使用较新版本的Python时,文件打开函数必须添加rb标志(我已经阅读过,但不确定是否适用于写入)。 - Gruber
出现错误 TypeError: write() argument must be str, not bytes。我正在使用 Py3.7。 - Volatil3
@Volatil3 谢谢你让我知道。我不确定为什么,但是代码不再起作用了。我已经更新了示例。 - Martin Thoma
显示剩余4条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接