使用Shelve將對(duì)象保存在Python中

Shelve是用于對(duì)象持久性的強(qiáng)大Python模塊。當(dāng)您擱置對(duì)象時(shí),必須分配一個(gè)密鑰,通過(guò)該密鑰可以知道對(duì)象值。通過(guò)這種方式,shelve文件成為存儲(chǔ)值的數(shù)據(jù)庫(kù),可以隨時(shí)訪問(wèn)任何存儲(chǔ)值。

Python中Shelve的示例代碼

要擱置對(duì)象,首先導(dǎo)入模塊,然后分配對(duì)象值,如下所示:

 
導(dǎo)入貨架
數(shù)據(jù)庫(kù)=shelve.open(文件名)
object=object()
database['key']=object

例如,如果要保存庫(kù)存數(shù)據(jù)庫(kù),可以調(diào)整以下代碼:

導(dǎo)入貨架

庫(kù)存值?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)打開(kāi),您不需要'需要再次打開(kāi)它。相反,您可以一次打開(kāi)多個(gè)數(shù)據(jù)庫(kù),隨意寫入每個(gè)數(shù)據(jù)庫(kù),并在程序終止時(shí)讓Python關(guān)閉它們。例如,您可以為每個(gè)符號(hào)保留一個(gè)單獨(dú)的名稱數(shù)據(jù)庫(kù),并在前面的代碼中附加以下內(nèi)容:

###假設(shè)貨架已經(jīng)導(dǎo)入

庫(kù)存名稱?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ù)庫(kù)文件的名稱或后綴的任何更改都構(gòu)成不同的文件,因此構(gòu)成不同的數(shù)據(jù)庫(kù)。

健康教育知識(shí)測(cè)試題及答案

結(jié)果是包含給出的第二個(gè)數(shù)據(jù)庫(kù)文件n值。與大多數(shù)以自我樣式格式編寫的文件不同,擱置的數(shù)據(jù)庫(kù)以二進(jìn)制形式保存。

數(shù)據(jù)寫入文件后,可以隨時(shí)召回。如果要在以后的會(huì)話中恢復(fù)數(shù)據(jù),請(qǐng)重新打開(kāi)該文件。如果是同一會(huì)話,只需召回該值;shelve數(shù)據(jù)庫(kù)文件以讀寫模式打開(kāi)。以下是實(shí)現(xiàn)此目的的基本語(yǔ)法:

導(dǎo)入貨架
數(shù)據(jù)庫(kù)=shelve.open(文件名)
對(duì)象=數(shù)據(jù)庫(kù)[&##39;鍵']

因此,前面示例中的示例將讀?。?/p>

導(dǎo)入貨架
stockname?file=shelve.open(&)39;stockname.db')
stockname_ibm=stockname_file['ibm']
stockname_db=stockname#file['db']

考慮擱置

重要的是要注意,數(shù)據(jù)庫(kù)在關(guān)閉之前(或直到程序終止)保持打開(kāi)狀態(tài)。因此,如果您正在編寫任何大小的程序,則需要在使用它后關(guān)閉數(shù)據(jù)庫(kù)。否則,整個(gè)數(shù)據(jù)庫(kù)(不僅僅是您想要的值)位于內(nèi)存中并消耗計(jì)算資源。

要關(guān)閉擱置文件,請(qǐng)使用以下語(yǔ)法:

數(shù)據(jù)庫(kù)()

如果上面的所有代碼示例都合并到一個(gè)程序中,那么此時(shí)我們將打開(kāi)兩個(gè)數(shù)據(jù)庫(kù)文件并消耗內(nèi)存。因此,在上一個(gè)示例中讀取了股票名稱之后,您可以依次關(guān)閉每個(gè)數(shù)據(jù)庫(kù),如下所示:

庫(kù)存值_關(guān)閉()
庫(kù)存_關(guān)閉()
庫(kù)存_文件關(guān)閉()