Python 物件持久化 (shelve)


Python 標準庫中的 shelve 模組是一個簡單而有效的持久化資料儲存工具,在不需要關係資料庫解決方案時可以使用。該模組中定義的 shelf 物件是一個類似字典的物件,持久儲存在磁碟檔案中。這會建立一個類似於類 Unix 系統上 dbm 資料庫的檔案。只有字串資料型別可以用作此特殊字典物件的鍵,而任何可 pickle 的物件都可以用作值。

shelve 模組定義了以下三個類:

序號模組及描述
1Shelf
這是 shelf 實現的基類。它使用類似字典的物件進行初始化。
2BsdDbShelf
這是 Shelf 類的子類。傳遞給其建構函式的字典物件必須支援 first()、next()、previous()、last() 和 set_location() 方法。
3DbfilenameShelf
這也是 Shelf 的子類,但它接受檔名作為其建構函式的引數,而不是字典物件。

建立 Shelf 物件最簡單的方法是使用 shelve 模組中定義的 open() 函式,它返回一個 DbfilenameShelf 物件。

open(filename, flag = 'c', protocol=None, writeback = False)

檔名引數被分配給建立的資料庫。

flag 引數的預設值為 'c',表示讀寫訪問。其他標誌為 'w'(只寫)、'r'(只讀)和 'n'(新的讀寫)。

protocol 引數表示 pickle 協議,writeback 引數預設為 false。如果設定為 true,則快取訪問的條目。每次訪問都會呼叫 sync() 和 close() 操作,因此程序可能會變慢。

以下程式碼建立了一個數據庫並在其中儲存字典條目。

import shelve
s = shelve.open("test")
s['name'] = "Ajay"
s['age'] = 23
s['marks'] = 75
s.close()

這將在當前目錄中建立 test.dir 檔案,並將鍵值資料以雜湊形式儲存。Shelf 物件具有以下可用方法:

序號方法及描述
1close()
同步並關閉持久化字典物件。
2sync()
如果 shelf 以 writeback 設定為 True 開啟,則寫回快取中的所有條目。
3get()
返回與鍵關聯的值。
4items()
元組列表——每個元組都是鍵值對。
5keys()
shelf 鍵的列表。
6pop()
刪除指定的鍵並返回相應的值。
7update()
從另一個字典/可迭代物件更新 shelf。
8values()
shelf 值的列表。

訪問 shelf 中特定鍵的值。

>>> s=shelve.open('test')
>>> s['age']
23
>>> s['age']=25
>>> s.get('age')
25

items()、keys() 和 values() 方法返回檢視物件。

>>> list(s.items())
[('name', 'Ajay'), ('age', 25), ('marks', 75)]
>>> list(s.keys())
['name', 'age', 'marks']
>>> list(s.values())
['Ajay', 25, 75]

從 shelf 中刪除鍵值對。

>>> s.pop('marks')
75
>>> list(s.items())
[('name', 'Ajay'), ('age', 25)]

請注意,marks-75 的鍵值對已被刪除。

要將另一個字典的專案與 shelf 合併,請使用 update() 方法。

>>> d={'salary':10000, 'designation':'manager'}
>>> s.update(d)
>>> list(s.items())
[('name', 'Ajay'), ('age', 25), ('salary', 10000), ('designation', 'manager')]

在本文中,我們學習了 shelve 模組,它提供了一種方便的機制來儲存持久化字典物件。

更新於:2020年6月25日

4K+ 次瀏覽

啟動您的職業生涯

透過完成課程獲得認證

開始
廣告
© . All rights reserved.