2
我一直在使用Shelve作爲文檔存儲。 該鍵是一個字符串化的整數,該值只是字符串中的一些html。不幸的是,我的腳本最終在db中放入了這麼多條目,以致發生錯誤(我沒有準確的那些)。分貝大約是36GB的大小,現在當我加載它,然後嘗試和迭代上的按鍵或像我碰到下面的錯誤什麼...如何從可能損壞或太大的Python Shelve db中恢復數據?
import shelve
db = shelve.open("my.shelf")
ks = db.keys()
for k in ks: print(k)
...
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/_collections_abc.py", line 482, in __iter__
yield from self._mapping
File "/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/shelve.py", line 95, in __iter__
for k in self.dict.keys():
SystemError: Negative size passed to PyBytes_FromStringAndSize
>>> list(ks.__dict__.values())[0].dict
<_dbm.dbm object at 0x10037ef90>
>>> help(list(ks.__dict__.values())[0].dict)
>>> list(ks.__dict__.values())[0].dict.keys()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
SystemError: Negative size passed to PyBytes_FromStringAndSize
這是OSX優勝美地。 Python 3.4
有沒有辦法修復這個問題,或者把鍵和值拿出來放到更合適的商店?
它看起來像你的尺寸是如此之大,它克服了整數限制,因此進入負數。我有一個建議是這樣做的:'for k in ks:yield k' - 使用'yield'關鍵字創建一個生成器,它在使用時只返回一個值。 http://simeonvisser.com/posts/python-3-using-yield-from-in-generators-part-1.html – NuclearPeon 2015-03-30 17:20:43