少說話多寫程式碼之Python學習063——標準模組(shelve模組)
阿新 • • 發佈:2018-12-20
如果我們只需要存少量的資料,一個簡單的儲存方案是使用shelve模版。我們只需要給他提供一個指定路徑的檔名。shelve呼叫過程是,
先呼叫open函式,引數為檔名。返回值是一個shell物件。這個物件可以用來儲存資料,可以作為一個字典來操作,但是鍵一定是字串型別的。操作完成後呼叫close函式。看下shelve的簡單使用,
import shelve #引數為檔名,會在當前執行目錄下建立三個檔案 #test.dat.bak #test.dat.dat #test.dat.dir s=shelve.open('test.dat') s['x'] = ['a','b','c'] s['x'].append('d') print(s['x']) 輸出 ['a', 'b', 'c'] temp=s['x'] temp.append('d') s['x']=temp print(s['x']) 輸出 ['a', 'b', 'c', 'd']
第一段程式碼中,d不見了,因為當用shell物件查詢元素時,這個物件根據已經儲存的版本進行構建,當給某個鍵時,被儲存了。
上述過程如下,
['a','b','c']賦值給x鍵;
d新增時,當前版本並未儲存;
獲取值時,獲取的是原始版本,因此d不見了。
而第二段,temp是副本,副本修改後,重新儲存了,所以能獲取到d。我們再通過這個例子,看看shelve實現簡單的資料儲存。
如下,使用shelve模版模擬簡單資料庫的使用。
import sys,shelve def store_person(db): """ Query user for data store it in the shelf object """ pid=input("輸入唯一編碼:") person={} person['name'] =input('請輸入姓名:') person['age']=input('請輸入年齡:') person['phone']=input('請輸入電話號碼:') db[pid]= person def lookup_person(db): """ Query user for id and desired field,and fetch the corresponding data form the shelf object """ pid = input('輸入唯一編碼:') field=input('以下資訊請輸入:(name,age,phone)') field=field.strip().lower() print(field.capitalize()+':',\ db[pid][field]) def print_help(): print('有效的命令有:') print('store: 儲存一個person物件') print('lookup: 通過id查詢一個person物件') print('quit: 儲存退出') print('?:顯示幫助資訊') def endter_command(): cmd=input('輸入命令:(按?請求幫助)') cmd=cmd.strip().lower() return cmd def main(): #此處路徑根據實際的檔案路徑更改,不用提前建立該檔案,會自動建立 #D:\\work\\Python\\是我本地電腦存在的目錄,大家測試可以自行修改目錄 database= shelve.open('D:\\work\\Python\\database.dat') try: while True: cmd=endter_command() if cmd=='store': store_person(database) elif cmd=='lookup': lookup_person(database) elif cmd=='?': print_help() elif cmd =='quit': return finally: database.close() #呼叫 main()
操作輸出如下
輸入命令:(按?請求幫助)?
有效的命令有:
store: 儲存一個person物件
lookup: 通過id查詢一個person物件
quit: 儲存退出
?:顯示幫助資訊
輸入命令:(按?請求幫助)store
輸入唯一編碼:1
請輸入姓名:yangyoushan
請輸入年齡:31
請輸入電話號碼:13011111
輸入命令:(按?請求幫助)lookup
輸入唯一編碼:1
以下資訊請輸入:(name,age,phone)name
Name: yangyoushan
輸入命令:(按?請求幫助)quit
功能檔案下載:https://download.csdn.net/download/yysyangyangyangshan/10860069