shelve模塊是python中用于持久化存儲的工具,它以鍵值對形式保存數據,支持增刪改查操作。1. 寫入數據:使用shelve.open打開文件后直接賦值;2. 讀取數據:通過鍵獲取對應的值;3. 修改數據:為已有鍵重新賦值;4. 刪除數據:用del刪除指定鍵值對。適合用于存儲配置、緩存結果、保存應用狀態等場景,但需注意不能支持并發寫入、修改可變對象需重新賦值、跨平臺兼容性等問題。
在python中,如果你想找一個簡單又實用的方式來保存數據,shelve模塊是個不錯的選擇。它能讓你像操作字典一樣存儲和讀取數據,并且數據是持久化的,也就是說程序退出后數據還在。
什么是shelve模塊?
shelve 是 Python 標準庫中的一個模塊,它的核心功能是提供持久化存儲能力。你可以把它理解成一個“磁盤上的字典”,通過鍵值對(key-value)的方式把數據存到文件里,下次再讀出來用。
使用上很簡單:打開一個 shelve 文件,就可以像操作普通字典那樣賦值、取值、刪除。它底層其實是基于 pickle 模塊來序列化對象的。
如何進行鍵值對操作?
shelve 的基本用法非常直觀,主要就是增刪改查幾個動作:
立即學習“Python免費學習筆記(深入)”;
-
寫入數據
打開文件后直接像字典一樣賦值就行:
import shelve with shelve.open('mydata') as db: db['name'] = 'Alice' db['age'] = 25
-
讀取數據
同樣用 key 來獲取 value:
with shelve.open('mydata') as db: print(db['name']) # 輸出 Alice
-
修改數據
直接給已有的 key 賦新值即可:
with shelve.open('mydata') as db: db['age'] = 26
-
刪除數據
使用 del 刪除某個鍵值對:
with shelve.open('mydata') as db: del db['age']
需要注意的是,shelve 存儲的對象必須是可以被 pickle 序列化的,比如列表、字典、數字、字符串這些沒問題,但自定義類對象需要小心處理。
常見使用場景有哪些?
shelve 最適合用于一些輕量級的數據持久化需求,比如:
- 存儲配置信息
- 緩存計算結果避免重復執行
- 小型應用的狀態保存(如游戲進度)
舉個例子,你寫了個爬蟲,每次都要請求網頁很慢,那可以把已經抓取過的內容用 url 作為 key 存起來,下次先查有沒有緩存,沒有再請求。
有什么注意事項?
雖然 shelve 簡單好用,但也有一些容易忽略的地方:
-
它不是數據庫替代品,不能支持并發寫入,多個進程同時寫可能出錯。
-
修改可變對象時要記得重新賦值,否則不會保存改動:
with shelve.open('mydata') as db: lst = db.get('mylist', []) lst.append(1) db['mylist'] = lst # 必須重新賦值才能保存
-
默認是以讀寫模式打開文件,如果希望只讀可以加參數:
shelve.open('mydata', flag='r')
-
不同操作系統下生成的文件格式可能有差異,注意跨平臺兼容性問題。
基本上就這些了。用得合適的話,shelve 可以幫你省不少事,特別是快速開發小工具或腳本的時候。