1. 程式人生 > >python中的序列化問題

python中的序列化問題

序列化 是指將物件、資料結構的狀態資訊轉換為可以儲存或傳輸的形式的過程。在序列化期間,物件將其當前狀態寫入到臨時或永續性儲存區。以後,可以通過從儲存區中讀取或反序列化物件的狀態,重新建立該物件。
我們編寫的程式,會涉及到各種各樣的物件、資料結構,它們通常是以變數的形式在記憶體中存在著。當程式執行結束後,這些變數也就會被清理。但我們有時希望能夠在下一次編寫程式時恢復上一次的某個物件(如機器學習中的到結果,需要程式執行較長時間,多次執行時間成本太大),這就需要我們將變數進行持久化的儲存。一種方式是利用檔案讀寫的方式將變數轉化為某種形式的字串寫入檔案內,但需要自己控制儲存格式顯得十分笨拙。更好的方式是通過序列化的方式將變數持久化至本地。
之前第一次聽序列化的時候,對這個概念很模糊,通過一端時間的學習,自己查閱了一些資料,寫的都挺簡單易懂,分享給大家:


1.json序列化變數
序列化物件至本地檔案:
json.dump(obj, fp, *, skipkeys=False, ensure_ascii=True, check_circular=True, allow_nan=True, cls=None, indent=None, separators=None, default=None, sort_keys=False, **kw)
對應的反序列化方法:
json.load(fp, *, cls=None, object_hook=None, parse_float=None, parse_int=None, parse_constant=None, object_pairs_hook=None, **kw)

序列化物件至字串:
json.dumps(obj, *, skipkeys=False, ensure_ascii=True, check_circular=True, allow_nan=True, cls=None, indent=None, separators=None, default=None, sort_keys=False, **kw)
對應的反序列化方法:
json.loads(s, *, encoding=None, cls=None, object_hook=None, parse_float=None, parse_int=None, parse_constant=None, object_pairs_hook=None, **kw)
2.numpy序列化ndarray
序列化array:np.save(file, arr, allow_pickle=True, fix_imports=True)
序列化並壓縮:np.savez(file, *args, **kwds)
反序列化array:numpy.load(file, mmap_mode=None, allow_pickle=True, fix_imports=True, encoding='ASCII')