Python 修复损坏的搁置缓存
我创建的搁置不允许我在没有以下故障的情况下访问密钥Python 修复损坏的搁置缓存,python,database,shelve,Python,Database,Shelve,我创建的搁置不允许我在没有以下故障的情况下访问密钥 x=shelve.open('my_shelve.pkl')) x、 按键() bsddb.db.DBPageNotFoundError:(-30986,'BDB0075 db\u PAGE\u NOTFOUND:请求的页面未找到') 但是,我可以检查工具架是否包含这样的钥匙: x中的“some-key” 此外,Shelf将返回正确的数据,其中包含 x['some-key'] 我没有其他地方的密钥列表,因此我希望以某种方式检索密钥,以便检索数据
x=shelve.open('my_shelve.pkl'))
x、 按键()
bsddb.db.DBPageNotFoundError:(-30986,'BDB0075 db\u PAGE\u NOTFOUND:请求的页面未找到')
但是,我可以检查工具架是否包含这样的钥匙:
x中的“some-key”
此外,Shelf将返回正确的数据,其中包含
x['some-key']
我没有其他地方的密钥列表,因此我希望以某种方式检索密钥,以便检索数据,或者以其他方式修复数据库的问题
我正在使用Python 2.7.6当数据库文件损坏时(例如,过去可能无法对其调用
close
),您可能无法恢复其所有内容(文件格式没有足够的冗余来支持)
但是,您可能可以按如下方式恢复其中的一部分:
recov = {}
try:
for k in x:
recov[k] = x[k]
except Exception:
pass
用这种方法无法预测您能够恢复多少个键(以及相关的值),但至少不要求所有键(正如我想象您正在使用
x.keys()
——您没有告诉我们您使用的是哪个Python版本,但我猜是2您可能可以恢复其中的一些内容…我使用的是Python 2.7.6,但我无法用它恢复任何内容(它甚至在进入循环体之前就失败了),然后尝试用Python 3.4恢复一些数据,它使用的逻辑稍有不同。如果这也完全失败了,那么这就意味着对你的文件的破坏太大了,你无法恢复任何东西。行号的确切错误消息是什么?如果知道错误源于哪一行,则可以编辑库代码。