shelve
shelve是一個簡單的資料儲存方案,他只有一個函數就是open(),這個函數接收一個參數就是檔名,然後回傳一個shelf對象,你可以用他來儲存東西,就可以簡單的把他當作一個字典,當你儲存完畢的時候,就呼叫close函數來關閉
這個有一個潛在的小問題,如下:
[python] view plaincopy
>>> import shelve
>>> s = shelve. open('test.dat')
>>> s['x'] = ['a', 'b', 'c']
>>> s['x'].append('d')
>>> s['x']
['a', 'b', 'c']
儲存的d到哪裡去了呢?其實很簡單,d沒有寫回,你把['a', 'b', 'c']存到了x,當你再次讀取s['x']的時候,s['x']只是一個拷貝,而你沒有將拷貝寫回,所以當你再次讀取s['x']的時候,它又從源中讀取了一個拷貝,所以,你新修改的內容並不會出現在拷貝中,解決的辦法就是,第一個是利用一個緩存的變量,如下所示
[python] view plaincopy
>>> temp = s['x']
>>> temp.append('d')
>>> s['x'] = temp
>>> s['x']
['a', 'b', 'c', 'd']
在python2.4中有了另一個的方法,就是把open方法的writeback參數的值賦為True,這樣的話,你open後所有的內容都將在cache中,當你close的時候,將全部一次性寫到硬碟裡面。如果資料量不是很大的時候,建議這麼做。
下面是一個基於shelve的簡單資料庫的程式碼
[python] view plaincopy
#database.py
import sys, shelve
user for data and store it in the shelf object
"""
pid = raw_input('Enter unique ID number: ')
) person['age'] = raw_input( 'Enter age: ')
person['phone'] = raw_input('Enter phone number: ')
db[pid] = person
Query user for ID and desired field , and fetch the corresponding data from
the shelf object
"""
pid = raw_input('Enter number: ') ') phone) ')
field = field.strip().lower()
print field.capitalize() + ':',
db[pid able commons are: '
print ' store :Stores information about a person'
print 'lookup :Looks up a person from ID number'
print 'quit print:Save s and exave '
def enter_command():
cmd = raw_input ('Enter command (? for help): ')
cmd = cmd.strip().lower()
return cmd
, main(():openomain(com):open
try:
while True:
cmd = enter_command() store_person(database)
elif cmd == '查找':
Lookup_person(資料庫)
print_help()
elif cmd == '退出':
database.close()
if __name__ = = '__main__': main()