【发布时间】:2013-09-24 22:53:46
【问题描述】:
我对 Python 很幼稚。但是,我开始知道两者都被用于序列化和反序列化。那么,我只想知道它们之间的所有基本区别是什么?
【问题讨论】:
标签: python python-2.7 serialization yaml pickle
我对 Python 很幼稚。但是,我开始知道两者都被用于序列化和反序列化。那么,我只想知道它们之间的所有基本区别是什么?
【问题讨论】:
标签: python python-2.7 serialization yaml pickle
YAML 是一种语言中立的格式,可以很好地表示原始类型(int、string 等),并且在语言之间具有高度可移植性。类似于 JSON、XML 或纯文本文件;只是混合了一些有用的格式约定——事实上,YAML 是 JSON 的超集。
Pickle 格式是 Python 特有的,可以表示多种数据结构和对象,例如Python 列表、集合和字典; Python 类的实例;以及这些对象列表的组合;包含包含列表的dicts的对象;等等
所以基本上:
还有更多,但您要求的是“基本”区别。
【讨论】:
<something> 开始一个块的XML 相比,您应该以</something> 结束同一个块。由于这个原因,YAML 比 XML 或 JSON 更容易复制、剪切和粘贴。最简单的经验法则是,如果您只使用原始数据类型,请选择 YAML(或 JSON),因为它们是人类可读、可编辑和可移植的;但如果您使用的是非原始数据类型(例如 Python 对象),则必须使用 Pickle。
cPickle 而不是pickle,它会快得多。
【讨论】:
pickle 不是一种方法:在与语言无关的格式之间进行选择:YAML、JSON、XML , CSV 等。看看 ujson 和 simplejson 模块 - 与 json 模块相比,它们相当快。
如果一个人读取文件对你来说并不重要,但你只需要保存文件,然后读取它,然后使用pickle。它速度更快,并且二进制文件的重量更轻。
如上所述,YAML 文件更具可读性,但速度较慢且体积较大。
我已经测试了我的应用程序。我测量了将对象上传和下载到文件的时间以及文件的大小。
| Serialization/deserialization method | Average time, s | Size of file, kB |
|---|---|---|
| PyYAML | 1.73 | 1149.358 |
| pickle | 0.004 | 690.658 |
如您所见,yaml 重 1.67 倍。而且慢了 432.5 倍。
P。 S. 这是我的数据。在您的情况下,可能会有所不同。但这足以进行比较。
【讨论】: