Я использовал Shelve в качестве хранилища документов. Ключ представляет собой строковое целое число, а значение представляет собой просто какой-то html в строке. К сожалению, мой сценарий закончил тем, что поместил так много записей в базу данных, что возникли ошибки (у меня нет точных под рукой). БД имеет размер около 36 ГБ, и теперь, когда я загружаю ее, а затем пытаюсь повторить ключи или что-то в этом роде, я получаю следующую ошибку...
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 Yosemite. Питон 3.4
Есть ли способ исправить это или получить ключи и значения для размещения в более подходящем хранилище?
for k in ks: yield k
-- использование ключевого словаyield
создает генератор, который возвращает значение только тогда, когда он используется. simeonvisser.com/posts/ а> - person NuclearPeon   schedule 30.03.2015