-
序列化/反序列化
將對象轉換爲可通過網絡傳輸或可以存儲到本地磁盤的數據格式(如:XML、JSON或特定格式的字節串)的過程稱爲序列化;反之,則稱爲反序列化
-
shelve
shelve是一個簡單的數據存儲方案,類似key-value數據庫,可以很方便的保存python對象,其內部是通過pickle協議來實現數據序列化。shelve只有一個open()函數,這個函數用於打開指定的文件(一個持久的字典),然後返回一個shelf對象。shelf是一種持久的、類似字典的對象。它與“dbm”的不同之處在於,其values值可以是任意基本Python對象–pickle模塊可以處理的任何數據。這包括大多數類實例、遞歸數據類型和包含很多共享子對象的對象。keys還是普通的字符串。
-
使用示例
-
導入模塊
import shelve
-
生成測試數據
# 自定義class class Student(object): def __init__(self, name, age, sno): self.name = name self.age = age self.sno = sno def __repr__(self): return 'Student [name: %s, age: %d, sno: %d]' % (self.name, self.age, self.sno) # 保存數據 tom = Student('Tom', 19, 1) jerry = Student('Jerry', 17, 2)
-
序列化,保存至文件
with shelve.open('../data/stu.db') as db: db['Tom'] = tom db['Jerry'] = jerry db['attr1'] = 1 db['attr2'] = [3,5,7]
-
反序列化,從文件中讀回對象
with shelve.open('../data/stu.db') as db: a = db['Tom'] b = db['Jerry'] c = db['attr1'] d = db['attr2'] print(type(a)) # <class '__main__.Student'> print(a) # Student [name: Tom, age: 19, sno: 1] print(a.name) # Tom print(b) # Student [name: Jerry, age: 17, sno: 2] print(c) # 1 print(d) # [3, 5, 7]
-
-
參考文獻
Python中shelve序列化與反序列化
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.