使用Shelve將對(duì)象保存在Python中
Shelve是用于對(duì)象持久性的強(qiáng)大Python模塊。當(dāng)您擱置對(duì)象時(shí),必須分配一個(gè)密鑰,通過該密鑰可以知道對(duì)象值。通過這種方式,shelve文件成為存儲(chǔ)值的數(shù)據(jù)庫,可以隨時(shí)訪問任何存儲(chǔ)值。
Python中Shelve的示例代碼
要擱置對(duì)象,首先導(dǎo)入模塊,然后分配對(duì)象值,如下所示:
導(dǎo)入貨架
數(shù)據(jù)庫=shelve.open(文件名)
object=object()
database['key']=object
例如,如果要保存庫存數(shù)據(jù)庫,可以調(diào)整以下代碼:
導(dǎo)入貨架
庫存值?db=shelve.open(&)39;stockvalues.db')
對(duì)象?ibm=值.ibm()
stockvalues?udB['ibm']=對(duì)象?ibm
對(duì)象?vmw=Values.vmw()
stockvalues?db['vmw']=對(duì)象?vmw
對(duì)象?db=值db()
stockvalues?db['db']=對(duì)象?db
A"股票值.db"已經(jīng)打開,您不需要'需要再次打開它。相反,您可以一次打開多個(gè)數(shù)據(jù)庫,隨意寫入每個(gè)數(shù)據(jù)庫,并在程序終止時(shí)讓Python關(guān)閉它們。例如,您可以為每個(gè)符號(hào)保留一個(gè)單獨(dú)的名稱數(shù)據(jù)庫,并在前面的代碼中附加以下內(nèi)容:
###假設(shè)貨架已經(jīng)導(dǎo)入
庫存名稱?db=shelve.open(&)39;stockname.db')
objectname?uIBM=姓名()
stocknames?db['ibm']=objectname?ibm
objectname?vmw=姓名.vmw()
stockname?db['vmw']=objectname_vmw
objectname_db=名稱()
stockname?db['db']=objectname?db
請(qǐng)注意,數(shù)據(jù)庫文件的名稱或后綴的任何更改都構(gòu)成不同的文件,因此構(gòu)成不同的數(shù)據(jù)庫。
健康教育知識(shí)測(cè)試題及答案
結(jié)果是包含給出的第二個(gè)數(shù)據(jù)庫文件n值。與大多數(shù)以自我樣式格式編寫的文件不同,擱置的數(shù)據(jù)庫以二進(jìn)制形式保存。
數(shù)據(jù)寫入文件后,可以隨時(shí)召回。如果要在以后的會(huì)話中恢復(fù)數(shù)據(jù),請(qǐng)重新打開該文件。如果是同一會(huì)話,只需召回該值;shelve數(shù)據(jù)庫文件以讀寫模式打開。以下是實(shí)現(xiàn)此目的的基本語法:
導(dǎo)入貨架
數(shù)據(jù)庫=shelve.open(文件名)
對(duì)象=數(shù)據(jù)庫[#39;鍵']
因此,前面示例中的示例將讀?。?/p>
導(dǎo)入貨架
stockname?file=shelve.open(&)39;stockname.db')
stockname_ibm=stockname_file['ibm']
stockname_db=stockname#file['db']
考慮擱置
重要的是要注意,數(shù)據(jù)庫在關(guān)閉之前(或直到程序終止)保持打開狀態(tài)。因此,如果您正在編寫任何大小的程序,則需要在使用它后關(guān)閉數(shù)據(jù)庫。否則,整個(gè)數(shù)據(jù)庫(不僅僅是您想要的值)位于內(nèi)存中并消耗計(jì)算資源。
要關(guān)閉擱置文件,請(qǐng)使用以下語法:
數(shù)據(jù)庫()
如果上面的所有代碼示例都合并到一個(gè)程序中,那么此時(shí)我們將打開兩個(gè)數(shù)據(jù)庫文件并消耗內(nèi)存。因此,在上一個(gè)示例中讀取了股票名稱之后,您可以依次關(guān)閉每個(gè)數(shù)據(jù)庫,如下所示:
庫存值_關(guān)閉()
庫存_關(guān)閉()
庫存_文件關(guān)閉()