我一直在使用Python的pickle
用于实现基于瘦文件的持久性层的模块。这个
持久层(更大库的一部分)严重依赖pickle的persistent_id特性
将指定类的对象另存为单独的文件。
这种方法的唯一问题是pickle文件不是人类的
可编辑,我更希望对象以
使用文本编辑器(例如,YAML或JSON)可供人类阅读和编辑。
你知道有哪个库使用人类可编辑格式和
提供类似于pickle的persistent_id
的功能?或者,
你有没有建议在YAML-or上实现它们
基于JSON的序列化库,无需重写
泡菜?
Tags:
我自己还没有尝试过,但我认为你应该可以用PyYAML使用他们所称的"representers" and "resolvers"优雅地完成这项工作。在
编辑
在与海报进行了大量的评论交流之后,下面是一个使用PyYAML实现所需行为的方法。在
重要注意事项:如果一个
Persistable
实例有另一个这样的实例作为属性,或者以某种方式包含在它的某个属性中,那么所包含的Persistable
实例将不会保存到另一个单独的文件中,而是与父实例Persistable
实例一起内联保存在同一个文件中。据我所知,这个限制也存在于OP的pickle-based系统中,并且对于他/她的用例来说是可以接受的。我还没有找到一个不涉及黑客攻击的优雅解决方案。在从现在起,当您想将}。但是不要在
Persistable
类的实例保存到单独的文件中时,请使用my_yaml_dump
,而不是{persistable_representer
和persistable_constructor
内部使用它!不需要特殊的加载函数,只需使用yaml.load
。在哎呀,这花了点功夫。。。我希望这有帮助!在
相关问题 更多 >
编程相关推荐