python shelve程式設計

2021-06-21 15:35:29 字數 2622 閱讀 3479

你如果需要乙個簡單的儲存方案,那麼,python中shelve模板可以滿足你的。

shelve唯一有趣的函式open,呼叫的時候返回乙個shelf物件,你可以用它來儲存物件。只需要把她當做字典來使用就可以了。但是一定注意:鍵一定是字串。所以如果你的鍵是數字,建議轉換一些。

int---->str     函式str。例如,將123轉換成『123』,只需要str(123)就成了。

還有乙個問題,就是shelve.open 返回的物件,乙個例子如下:

c 不在??

當你在shelve物件中查詢元素的時候,這個物件會根據已經儲存的版本進行重新構建,當你將某個元素賦值給某乙個鍵的時候,它就被儲存了。所以我們看到了,a,b

我們可以這樣來避免這個問題:

temp=s['x']

s['x']=temp

s['x']

或者,在python2.4之後,有乙個解決辦法:將open函式的writebace引數設定為true。這樣,所有從shelf讀取的或賦值的都會儲存在記憶體中,並且只有關閉shelf的時候才寫回磁碟。

下面是乙個簡單的資料庫應用。

#!/usr/bin/env python

import pdb

import sys,shelve

pdb.set_trace()

def store_people(db,id):

print 'now you are go to store information of one person'

person = {}

person['name'] = raw_input("please input name:")

person['age'] = raw_input("please input age:")

person['phone'] = raw_input("please input phone:")

#max = id;

db[str(id)] = person

def look_up(db,max):

flag = 0

print 'you are go to look up the database'

field = raw_input('please input the name you are go to look up:')

field = field.strip().lower()

for i in range(1000,max):

if db[str(i)]['name'] == field:

print '---------------------'

print 'pid:%d'% i

print 'name:%s'% db[str(i)]['name']

print 'age:%s'% db[str(i)]['age']

print 'phone:%s'% db[str(i)]['phone']

print '---------------------'

flag = 1

if flag == 0:

print 'no data found'

def enter_cmd():

cmd = raw_input("enter cmd(store or look):")

cmd = cmd.strip().lower()

return cmd

def main():

pid = 1000

max = pid

database = shelve.open('g:\\python\database.dat')

try:

while true:

cmd = enter_cmd()

if cmd == 'store':

store_people(database,pid)

pid = pid + 1

max = pid

print '%d'% pid

print '%d'% max

elif cmd == 'look':

look_up(database,max) #look_up(database,1003)

elif cmd == 'q':

return

finally:

database.close()

if __name__ == '__main__':

main()

書上說,shelve寫入的資料是可以儲存的,我上面的發現卻不能查詢以前儲存的資料。納悶了,於是乎知道了,這個需要你去指定id查詢才行,而我是根據name去查詢的。剛開始一執行,max,pid的值都是不曉得的。所以也就不成功了。

我上面的look_up寫成紅色的,就能按照名字查詢了。

**仿造python基礎教程

python shelve模組的使用及注意點

shelve是python中一種儲存結構化資料的模組,用法跟字典相似,以鍵值對的形式儲存。基本使用方法 1.引入模組 import shelve2.建立資料檔案 with shelve.open filename as object object shelve.open filename 兩種檔案操...

程式設計,還是程式設計

喜歡程式設計,雖然水平一般,但還是執著地學習與程式設計有關的知識。中間因為工作關係與程式設計遠離了一段時間,現在又重拾起來,細想起來還是因為喜歡吧。喜歡程式軟體的思想和原理,喜歡程式 的魅力和成就感。程式設計軟體的思想是最值得學習的,一直認為思想決定行動,思想改變世界。每種軟體的流行和受人追捧,無不...

少兒程式設計程式設計

機械人比賽,聽上去讓人有一種高大上的科技感,沒錯,在大多數人眼裡,玩機械人那是科學家做的事情,不過隨著機械人教育的普及,越來越多的孩子也能夠駕馭這高大上的機械人。格物斯坦小坦克告訴你原因,這是歸結於孩子對於程式設計課程的學習,學會對機械人進行程式設計了,自然就能玩轉機械人啦。參加機械人比賽的意義遠遠...