gpt4 book ai didi

Python 'shelve' 在每次操作后将自身写入磁盘

转载 作者:行者123 更新时间:2023-12-01 05:35:15 25 4
gpt4 key购买 nike

我正在用 Python 做一个项目,涉及大量与持久字典的交互工作。如果我不进行交互式开发,我可以使用 contextlib.looking 并相当有信心架子最终会被写入磁盘。但就目前情况而言,没有任何代码块可以轻松地包含在“with”语句中。我不想相信自己会在 session 结束时调用我的架子上的 close()。

涉及的数据量并不大,我很乐意在每次操作后将一个架子同步到磁盘。我发现自己正在为 shelve 编写一个包装器来实现这一点,但我不是一个足够强大的 Python 程序员,无法识别我需要重写的正确的 dict 方法集。在我看来,如果我正在做的事情是个好主意,那么以前可能已经有人做过了。处理这个问题的典型正确方法是什么?

我要补充一点,我喜欢使用 shelve,因为它是一个简单的模块,并且它带有 Python。如果可能的话,我宁愿避免做一些需要(例如)引入复杂的库来处理数据库的事情。

我正在使用带有 SP3 的 WinXP、通过 Anaconda 1.6.2(32 位)的 Python 2.7.5,并在 Spyder 中运行。通过查看支持架子的文件的修改时间,我可以看出,在调用同步或关闭之前,架子不会更新。

最佳答案

您可以做的是子类DbfilenameShelf并覆盖__setitem____delitem__以在每次更改后自动同步。像这样的东西可能会起作用(未经测试):

from shelve import DbfilenameShelf

class AutoSyncShelf(DbfilenameShelf):
# default to newer pickle protocol and writeback=True
def __init__(self, filename, protocol=2, writeback=True):
DbfilenameShelf.__init__(self, filename, protocol=protocol, writeback=writeback)
def __setitem__(self, key, value):
DbfilenameShelf.__setitem__(self, key, value)
self.sync()
def __delitem__(self, key):
DbfilenameShelf.__delitem__(self, key)
self.sync()

my_shelf = AutoSyncShelf("myshelf")

当然,我不能保证其性能。

关于Python 'shelve' 在每次操作后将自身写入磁盘,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19214650/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com