我正在为虚拟机开发 Unix 环境下的 API。我必须在有关虚拟机的表中存储一些信息。
目前我正在使用虚拟机对象的 python 字典并将其存储在 pickle 中。
我想知道在命令行 API 中存储数据的其他最佳方法(如果有)。任何建议都会有帮助。
答案1
对于其他人使用的应用程序,您可能不应该使用 pickle,因为它不会保存从不受信任的来源加载 pickle 数据(或者您必须 100% 确保在写入和读取之间无法更改光盘上的 pickle 数据)。
如果用户需要修改数据,您应该看看使用YAML。 Python 实现可通过鲁梅尔.yaml(免责声明:我是 YAML 1.2 解析器/转储器的作者)。
替代方案是JSON以及更多 XML 工作。
所有这些都要求您在内部类型与存储格式支持的类型(字典/映射、列表、原始类型(整数、字符串、布尔值))之间进行转换。
YAML 还支持用户定义的类型,与 pickle Python 数据具有相同的安全问题,但至少允许一些安全加载,这是 pickle 不支持的。 YAML 通过显式用户类型在更改源布局(重命名模块、移动类)后加载数据的问题更少,就像您在 pickle 中所体验到的那样。