在Python中,如何将ondisk JSON文件绑定到进程内字典?

2024-10-01 17:31:51 发布

您现在位置:Python中文网/ 问答频道 /正文

在perl中有tie操作符的思想,在这里写入或修改变量可以运行任意代码(例如更新一些底层的Berkeley数据库文件)。我很确定python中也有重载的概念。在

我很想知道最惯用的方法是在运行python脚本的整个过程中将本地JSON文件作为所需层次信息的规范源,以便本地字典中的更改自动反映在JSON文件中。我将让操作系统来优化写操作和缓存(我不介意在整个脚本运行过程中,文件基本上更新了几十次),但最终这只是我希望保留的大约一千字节的元数据。没有必要解决对这个问题的并发访问。我只希望能够在python进程中访问一个层次结构(如嵌套字典),并使该结构的读取(和写入)自动导致本地JSON文件的读取(和更改)。在


Tags: 文件方法代码脚本数据库json概念字典
3条回答

这是从aspect ku mkn8rd'的回答中发展而来的,考虑到了Gerrat的评论,但它太长了,无法作出真正的评论。在

你需要2个特殊的容器类来模拟一个列表和一个字典。在这两种方法中,都可以添加指向顶级对象的指针并重写以下方法:

  • __setitem__(self, key, value)
  • __delitem__(self, key)
  • __reversed__(self)

所有这些方法都是在修改中调用的,并且应该具有要写入磁盘的顶级对象。在

另外,__setitem__(self, key, value)应该检查value是否是一个列表并将其包装到一个特殊的list对象中,或者如果它是一个字典,则将其包装到一个特殊的dictionary对象中。在这两种情况下,方法都应该将顶级对象设置到新容器中。如果它们和对象都没有定义__setitem__,它应该引发一个异常,说明该对象不受支持。当然,您应该修改方法以考虑这个新类。在

当然,有大量的代码需要编写和测试,但它应该是有效的-留给读者作为练习:-)

如果不需要并发,可以考虑写2个函数来读写数据到一个shelf文件?我们的想法是让字典“意识到”更新文件的更改而不使用这种东西?在

既然python本身没有信号槽,我想您可以通过从python字典继承它来创建自己的dictionary类。类与python dict完全相同,只有在它的每个可以更改dict值的方法中,才会转储json。在

也可以使用smth,比如PyQt4 QAbstractItemModel,它有信号。当它的数据改变信号会发出,做你的倾销-它将只在一个地方,这是很好的。在

我知道这两种方式有点愚蠢,也许是的。:)如果有人知道得更好,那就说吧!在

相关问题 更多 >

    热门问题