Python中shelve序列化與反序列化

原文地址

  • 序列化/反序列化

    將對象轉換爲可通過網絡傳輸或可以存儲到本地磁盤的數據格式(如: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之數據序列化(json、pickle、shelve)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章