Python pickle()對數據進行序列化反序列化

序列化概述:

程序運行結束後,在內存中運行的變量,會被操作系統回收。序列化,就是把內存裏的變量進行存儲到硬盤中。反之稱爲反序列化

pickle:
pickle是python自帶的一個包,提供了序列化和反序列化操作。

pickle.load()方法,可以從文件中反序列化出對象。

pickle.dump()方法,可以直接把對象序列化後寫入文件中。、

代碼實現:

在memory.py中,導入我們將要用到的包,並創建Memory類

import pickle
import os.path

class Memory:
    """
    一個簡單的內存類用於封裝項目操縱的數據對象
    volatile是未保存的內存
    """
    volatile = {}

    def __init__(self):
        self.load_state() # 創建時啓動載入函數

    def __enter__(self):
        return self

    def __exit__(self, exc_type, exc_value, traceback):
        self.save_state() # 退出時啓用保存函數    

 # 執行save命令:同步保存操作,將當前redis實例的所有數據快照以rdb的形式保存到硬盤。
    def save_state(self):
        pickle.dump({'volatile': self.volatile}, open('dump.rdb', 'wb'))
        print("dump.rdb saved to disk") # 測試用

    def load_state(self):
        if os.path.exists('dump.rdb'): # 如果存在rdb快照
            state = pickle.load(open('dump.rdb', 'rb')) # 載入快照
            # 分別讀取分序列化後相應的值
            self.volatile = state['volatile']

            print("dump.rdb loaded into volatile memory") #測試用

memory = Memory()

打開終端,進入python3交互環境中,輸入以下代碼測試:

>>>from memory import memory
>>>memory.volatile['key'] = 'value'
>>>memory.save_state()

測試結果:

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