如何使用 pickle 保存字典(或任何其他 Python 对象)?

新手上路,请多包涵

我已经查看了 Python 文档 提供的信息,但我仍然有点困惑。有人可以发布编写新文件然后使用 pickle 将字典转储到其中的示例代码吗?

原文由 Chachmu 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 345
2 个回答

试试这个:

 import pickle

a = {'hello': 'world'}

with open('filename.pickle', 'wb') as handle:
    pickle.dump(a, handle, protocol=pickle.HIGHEST_PROTOCOL)

with open('filename.pickle', 'rb') as handle:
    b = pickle.load(handle)

print(a == b)

上面的解决方案没有任何特定于 dict 对象的解决方案。同样的方法将适用于许多 Python 对象,包括任意类的实例和任意复杂的数据结构嵌套。例如,用这些行替换第二行:

 import datetime
today = datetime.datetime.now()
a = [{'hello': 'world'}, 1, 2.3333, 4, True, "x",
     ("y", [[["z"], "y"], "x"]), {'today', today}]

也会产生 True 的结果。

有些对象由于其性质而无法腌制。例如,pickle 一个包含打开文件句柄的结构是没有意义的。

原文由 Blender 发布,翻译遵循 CC BY-SA 4.0 许可协议

import pickle

your_data = {'foo': 'bar'}

# Store data (serialize)
with open('filename.pickle', 'wb') as handle:
    pickle.dump(your_data, handle, protocol=pickle.HIGHEST_PROTOCOL)

# Load data (deserialize)
with open('filename.pickle', 'rb') as handle:
    unserialized_data = pickle.load(handle)

print(your_data == unserialized_data)

HIGHEST_PROTOCOL 的优点是文件变小了。这使得 unpickling 有时更快。

重要提示:pickle 的最大文件大小约为 2GB。

替代方式

import mpu
your_data = {'foo': 'bar'}
mpu.io.write('filename.pickle', data)
unserialized_data = mpu.io.read('filename.pickle')

替代格式

对于您的应用程序,以下内容可能很重要:

  • 其他编程语言的支持
  • 读/写性能
  • 紧凑性(文件大小)

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

如果您更愿意寻找一种制作配置文件的方法,您可能需要阅读我的短文 Configuration files in Python

原文由 Martin Thoma 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
logo
Stack Overflow 翻译
子站问答
访问
宣传栏