首頁 > 後端開發 > Python教學 > python shelve模組

python shelve模組

巴扎黑
發布: 2016-12-07 11:16:22
原創
1402 人瀏覽過

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()

相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板