Python3 pickle模塊用法


pickle(python3.x)和cPickle(python2.x的模塊)相當於java的序列化和反序列化操作。

常采用下面的方式使用:

import pickle
 
pickle.dump(obj,f)
pickle.dumps(obj,f)
pickle.load(f)
pickle.loads(f)

使用pickle模塊你可以把Python對象直接保存到文件,而不需要把他們轉化為字符串,也不用底層的文件訪問操作把它們寫入到一個二進制文件里。 pickle模塊會創建一個python語言專用的二進制格式,你基本上不用考慮任何文件細節,它會幫你干凈利落地完成讀寫獨享操作,唯一需要的只是一個合法的文件句柄。

pickle模塊中的兩個主要函數是dump()和load():

dump()函數接受一個文件句柄和一個數據對象作為參數,把數據對象以特定的格式保存到給定的文件中。當我們使用load()函數從文件中取出已保存的對象時,pickle知道如何恢復這些對象到它們本來的格式。

dumps()函數執行和dump() 函數相同的序列化。取代接受流對象並將序列化后的數據保存到磁盤文件,這個函數簡單的返回序列化的數據。

loads()函數執行和load() 函數一樣的反序列化。取代接受一個流對象並去文件讀取序列化后的數據,它接受包含序列化后的數據的str對象, 直接返回的對象。

示例:

# -*- coding:utf-8 -*-

import pickle

obj = 123, "abcdef", ["ac", 123], {"key": "value", "key1": "value1"}
print(obj)

# 序列化到文件
with open(r"F:\pycodes\ML\a.txt", "wb") as f:
    pickle.dump(obj, f)

with open(r"F:\\pycodes\\ML\\a.txt", "rb") as f:
    print(pickle.load(f))# 輸出:(123, 'abcdef', ['ac', 123], {'key': 'value', 'key1': 'value1'})

# 序列化到內存(字符串格式保存),然后對象可以以任何方式處理如通過網絡傳輸
obj1 = pickle.dumps(obj)
print(type(obj1))# 輸出<class 'bytes'>
print(obj1)# 輸出:python專用的存儲格式 b'\x80\x03(K{X\x06\x00\x00\x00abcdefq\x00]q\x01(X\x02\x00\x00\x00acq\x02K{e}q\x03(X\x03\x00\x00\x00keyq\x04X\x05\x00\x00\x00valueq\x05X\x04\x00\x00\x00key1q\x06X\x06\x00\x00\x00value1q\x07utq\x08.'

obj2 = pickle.loads(obj1)
print(type(obj2))# 輸出:<class 'tuple'>
print(obj2) # 輸出:(123, 'abcdef', ['ac', 123], {'key': 'value', 'key1': 'value1'})


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM