我一直在使用pickle并且很高兴,然后我看到了这篇文章:不要腌制你的数据 http://www.benfrederickson.com/2014/02/12/dont-pickle-your-data.html
进一步阅读似乎是:
-
泡菜很慢 http://kovshenin.com/2010/pickle-vs-json-which-is-faster/
- 泡菜不安全 https://stackoverflow.com/questions/6794454/json-vs-pickle-security
- Pickle 不是人类可读的
- Pickle 与语言无关
我已改用 JSON 格式保存数据,但我想了解最佳实践:
考虑到所有这些问题,你什么时候会使用pickle?哪些具体情况需要使用它?
Pickle 是不安全的,因为它通过调用任意函数来构造任意 Python 对象。然而,这也使其能够序列化几乎所有 Python 对象,而无需任何样板,甚至无需白名单/黑名单(在常见情况下)。这对于某些用例来说是非常理想的:
- 快速轻松的序列化,例如用于暂停和恢复长时间运行但简单的脚本。这里所有的问题都不重要,您只想按原样转储程序的状态并稍后加载它。
- 向其他进程或计算机发送任意 Python 数据,如下所示
multiprocessing
。安全问题may适用(但大多数情况下不适用),通用性是绝对必要的,人们不必阅读它。
在其他情况下,这些缺点都不足以证明将您的内容映射到 JSON 或其他限制性数据模型的工作是合理的。也许您不希望需要人类可读性/安全性/跨语言兼容性,或者也许您可以不需要。记住,你不会需要它。使用 JSON 是正确的事情™,但正确并不总是等于好的。
你会注意到我完全忽略了“慢”的缺点。这是因为它在一定程度上具有误导性:对于完全适合 JSON 模型(字符串、数字、数组、映射)的数据,Pickle 确实速度较慢,但如果您的数据是这样的,则无论如何您都应该出于其他原因使用 JSON。如果您的数据不是这样(很可能),您还需要考虑将对象转换为 JSON 数据所需的自定义代码,以及将 JSON 数据转换回您的对象所需的自定义代码。对象。它增加了工程工作量和运行时开销,必须根据具体情况进行量化。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)