Запустим интерактивный сеанс и поэкспериментируем с интерфейсами хранилищ. Как уже отмечалось, хранилища, по сути, являются постоянно хранимыми словарями объектов, которые необходимо открывать и закрывать:
C:\…\PP4E\Dbase> python
>>> import shelve
>>> dbase = shelve.open("mydbase")
>>> object1 = [‘The’, ‘bright’, (‘side’, ‘of’), [‘life’]]
>>> object2 = {‘name’: ‘Brian’, ‘age’: 33, ‘motto’: object1}
>>> dbase[‘brian’] = object2
>>> dbase[‘knight’] = {‘name’: ‘Knight’, ‘motto’: ‘Ni!’}
>>> dbase.close()
C:\…\PP4E\Dbase> python
>>> import shelve
>>> dbase = shelve.open("mydbase")
>>> len(dbase) # количество записей
2
>>> dbase.keys() # индекс
KeysView(<shelve.DbfilenameShelf object at 0x0181F630>)
>>> list(dbase.keys()) [‘brian’, ‘knight’]
>>> dbase[‘knight’] # извлечь
{‘motto’: ‘Ni!’, ‘name’: ‘Knight’}
> >> for row in dbase.keys(): # использовать метод .keys() необяз.
… print(row, ‘=>’)
… for field in dbase[row].keys():
… print(‘ ‘, field, ‘=’, dbase[row][field])
…
brian =>
motto = [‘The’, ‘bright’, (‘side’, ‘of’), [‘life’]] age = 33 name = Brian
knight => motto = Ni! name = Knight
Вложенные друг в друга циклы в конце этого сеанса выполняют обход вложенных словарей — внешний просматривает хранилище, а внутренний — объекты, хранящиеся в нем (в обоих можно было бы использовать итераторы по ключам и опустить вызовы .keys()). Важно отметить, что для записи и выборки этих постоянных объектов, так же как для их обработки после загрузки, используется обычный синтаксис Python. Это данные Python, постоянно хранящиеся на диске.
Использованная литература:
Марк Лутц — Программирование на Python, 4-е издание, II том, 2011