- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在用 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/
我正在尝试使用 shelve使用 Python 3.3。建议使用 with shelve.open('spam.db') as db:... 语法来确保我们关闭“连接”。但是,当我尝试它时,出现以下错
shelve -- 用来持久化任意的Python对象 这几天接触了Python中的shelve这个module,感觉比pickle用起来更简单一些,它也是一个用来持久化Python对象的简单工具。
我正在用 Python 做一个项目,涉及大量与持久字典的交互工作。如果我不进行交互式开发,我可以使用 contextlib.looking 并相当有信心架子最终会被写入磁盘。但就目前情况而言,没有任何
是shelve只读模式坏了?文档说 flag 参数按照 dbm.open 中的说明工作。所以我想如果我在阅读模式下打开我不应该能够改变搁置对象。 页面here似乎还建议修改以只读方式打开的搁置对象应该
我将让以下终端 session 说明一切: >>> import shelve >>> s = shelve.open('TestShelve') >>> from collections impor
对于我的 python 应用程序,我正在考虑使用 shelve , 标准库的一部分。将有数百个进程,每个进程都向同一个搁置对象写入一些内容。写作将始终是将新的键值对添加到货架上。键是唯一的,因此没有两
我一直在使用 Shelve 作为文档存储。键是一个字符串化的整数,值只是字符串中的一些 html。不幸的是,我的脚本最终在数据库中放入了太多条目,以至于发生了错误(我手头没有确切的条目)。数据库的大小
在 TFS 中,我过去常常搁置我的更改作为备份,然后再尝试一些有风险的事情或试验一些事情。 如果一切顺利,我刚刚删除了搁置。否则,我取消搁置备份并继续。 我没有兴趣与任何人分享这些更改。 Git 中的
在 Perforce 中,什么是“搁置”文件?搁置在工作区中打开以供编辑的文件的目的是什么? 最佳答案 来自 Perforce documentation : Shelving is the proc
我有一个执行以下操作的 Python 应用程序: 由另一个进程每 2-3 分钟调用一次,以便使用 with shelve.open(shelvefilename, flag='c') 来存储对象。 被
我正在尝试卡住涉及使用搁置模块的应用程序。为了卡住它,我正在使用 GUI2EXE python 代码并利用 cx_freeze 部分(如果我删除搁置部分,一切都会很好)。 当我去运行我编译的应用程序时
嘿,大家好,我正在为学校做一个项目,我必须问 10 个数学问题,然后存储他们的分数名称和类(class),但唯一的问题是我似乎无法立即回到搁置的工作。下面是我试图开始工作的代码,任何帮助都会很好。 g
我有一个在 OS X 上用 python 2.7.2 开发的应用程序。我使用模块 shelve 并且在 mac 上似乎默认为 bsddb。该程序不会在装有 ActiveState python 2.7
我要 用户A 能够在 Perforce 中创建一个更改列表,然后将其搁置。那么我想要 用户B 能够取消搁置该更改列表并提交它。 这听起来很简单,但 Perforce 上架似乎并不像我期望的那样工作。当
我正在使用 PyMemoize 库来缓存协程。我装饰了协程,但是当 Python 调用它时,我得到: TypeError: can't pickle coroutine objects 发生这种情况是
我已经设置了一个模拟操作系统的 Python 脚本。它有一个命令提示符和一个虚拟文件系统。我正在使用 shelve 模块来模拟文件系统,它是多维的以支持目录层次结构。但是,我无法执行“cd”命令。我不
我正在尝试编写一个使用 shelve 的内存库持久存储返回值。如果我有内存函数调用其他内存函数,我想知道如何正确打开 shelf 文件。 import shelve import functools
我正在运行一个 Python 程序,该程序在 pickle 之上使用 shelve 模块。运行这个程序后,有时我得到一个输出文件 a.data 但有时我得到三个输出文件 a.data.bak, a.d
在 perforce 的源代码管理选项中,我看不到从特定变更列表触发构建的选项。可以这样做吗? 最佳答案 替代解决方案@catchingUp也有可能使用“构建审核”操作点触发构建(可以在构建历史记录正
我安装了 hg shelve(不是阁楼)扩展,并且我想发布补丁。在 git 中,它是 git stash drop 。如何使用搁置扩展来执行此操作? 最佳答案 来自Mercurial shelve d
我是一名优秀的程序员,十分优秀!