天天看點

python:pickled的使用技巧

1:作用:

為python對象建立可移植的序列化對象:

#序列化,反序列化,是以檔案中的内容要求是清單或元組

pickle: 用于python特有的類型和python的資料類型間進行轉換

pickle提供四個功能: dumps,dump,loads,load

2:存儲資料類型:

pickle可以存儲的資料類型:

  • 所有python支援的原生類型:布爾值,整數,浮點數,複數,字元串,位元組,None。
  • 由任何原生類型組成的:清單,元組,字典和集合。
  • 函數,類,類的執行個體

    (python常用資料類型介紹)

  • 3:pickle子產品中常用的方法有:

1)pickle.dump(obj, file, protocol=None,)

必填參數obj表示将要封裝的對象

必填參數file表示obj要寫入的檔案對象,file必須以二進制可寫模式打開,即“wb”

可選參數protocol表示告知pickler使用的協定,支援的協定有0,1,2,3,預設的協定是添加在Python 3中的協定3。

  • Protocol version 0 is the original “human-readable” protocol and is backwards compatible with earlier versions of Python.
  • Protocol version 1 is an old binary format which is also compatible with earlier versions of Python.
  • Protocol version 2 was introduced in Python 2.3. It provides much more efficient pickling of new-style classes. Refer to PEP 307 for information about improvements brought by protocol 2.
  • Protocol version 3 was added in Python 3.0. It has explicit support for bytes objects and cannot be unpickled by Python 2.x. This is the default protocol, and the recommended protocol when compatibility with other Python 3 versions is required.
  • Protocol version 4 was added in Python 3.4. It adds support for very large objects, pickling more kinds of objects, and some data format optimizations. Refer to PEP 3154 for information about improvements brought by protocol 4.

2)pickle.load(file,*,fix_imports=True, encoding=“ASCII”, errors=“strict”) 必填參數file必須以二進制可讀模式打開,即“rb”,其他都為可選參數

3)pickle.dumps(obj):以位元組對象形式傳回封裝的對象,不需要寫入檔案中

4) pickle.loads(bytes_object): 從位元組對象中讀取被封裝的對象,并傳回

pickle子產品可能出現三種異常:

1. PickleError:封裝和拆封時出現的異常類,繼承自Exception
2. PicklingError: 遇到不可封裝的對象時出現的異常,繼承自PickleError
3. UnPicklingError: 拆封對象過程中出現的異常,繼承自PickleError
           

eg:

# dumps功能
import pickle
data = ['aa', 'bb', 'cc']  
# dumps 将資料通過特殊的形式轉換為隻有python語言認識的字元串

p_str = pickle.dumps(data)
print(p_str)            
b'\x80\x03]q\x00(X\x02\x00\x00\x00aaq\x01X\x02\x00\x00\x00bbq\x02X\x02\x00\x00\x00ccq\x03e.

# loads功能
# loads  将pickle資料轉換為python的資料結構
mes = pickle.loads(p_str)
print(mes)      
['aa', 'bb', 'cc']
# dump功能
# dump 将資料通過特殊的形式轉換為隻有python語言認識的字元串,并寫入檔案
with open('D:/tmp.pk', 'w') as f:
    pickle.dump(data, f)
# load功能
# load 從資料檔案中讀取資料,并轉換為python的資料結構
with open('D:/tmp.pk', 'r') as f:
    data = pickle.load(f)