Pickle模塊用于將python對象序列化為字節(jié)流,可存儲在文件或數(shù)據(jù)庫中,也可同通過網(wǎng)絡(luò)進行傳輸。使用反序列化(Unpickle)可以將生成的字節(jié)流轉(zhuǎn)換回python對象?!?/span>Pickling”是將Python對象層次結(jié)構(gòu)轉(zhuǎn)換為字節(jié)流的過程,“unpickling”是反向操作,從而將字節(jié)流(來自二進制文件或類似字節(jié)的對象)轉(zhuǎn)換回對象層次結(jié)構(gòu)。酸洗(或去除)也可稱為“序列化”,“編組”,不要將其與marshal模塊混淆或“扁平化”; 但是,為了避免混淆,這里使用的術(shù)語是“酸洗”和“破壞”。 把對象在內(nèi)存中的結(jié)構(gòu)轉(zhuǎn)換成便于存儲或傳輸?shù)亩M制或文本格式,而且以后可以在同一個系統(tǒng)或不同的系統(tǒng)中重建對象的副本。pickle模塊能把任何Python對象序列化成二進制格式。 Pickle模塊中dump()函數(shù)與load()函數(shù)的運用pickle模塊提供以下常量:
pickle.HIGHEST_PROTOCOL 整數(shù),可用的最高協(xié)議版本。該值可以作為協(xié)議值傳遞給函數(shù)dump()和dumps()以及pickler構(gòu)造函數(shù)。 pickle.DEFAULT_PROTOCOL 一個整數(shù),用于酸洗的默認協(xié)議版本。可能小于最高協(xié)議。目前默認的協(xié)議是3,這是為python 3設(shè)計的新協(xié)議。 pickle模塊提供以下功能,使酸洗過程更加方便: pickle.dump(obj,file,protocol = None,*,fix_imports = True ) 將obj的pickle d表示寫入打開的文件對象文件。這相當于。 Pickler(file, protocol).dump(obj) 可選的協(xié)議參數(shù),一個整數(shù),告訴pickler使用給定的協(xié)議; 支持的協(xié)議是0到HIGHEST_PROTOCOL。如果未指定,則默認為DEFAULT_PROTOCOL。如果指定了負數(shù),HIGHEST_PROTOCOL則選擇。 文件參數(shù)必須有一個接受單字節(jié)參數(shù)的write()方法。因此,它可以是一個為二進制寫入而打開的磁盤上文件、一個IO.Bytesio實例或滿足此接口的任何其他自定義對象。 如果fix_導(dǎo)入為真,且協(xié)議小于3,pickle將嘗試將新的python 3名稱映射到python 2中使用的舊模塊名稱,以便pickle數(shù)據(jù)流可以用python 2讀取。 pickle.dumps(obj,protocol =None,*,fix_imports = True ) 將對象的pickled表示作為bytes對象返回,而不是將其寫入文件。 arguments協(xié)議和fix_導(dǎo)入的含義與dump()中的含義相同。 pickle.load(file,*,fix_imports = True,encoding =“ASCII”,errors =“strict” ) 從打開的文件對象文件中讀取pickled對象表示,并返回其中指定的重新構(gòu)建的對象層次結(jié)構(gòu)。這相當于unpickler(file.load()。 自動檢測pickle的協(xié)議版本,因此不需要協(xié)議參數(shù)。超過pickled對象表示形式的字節(jié)將被忽略。 參數(shù)文件必須有兩個方法,一個采用整數(shù)參數(shù)的read()方法和一個不需要參數(shù)的readline()方法。兩種方法都應(yīng)返回字節(jié)。因此,文件可以是為二進制讀取而打開的磁盤上文件、IO.Bytesio對象或滿足此接口的任何其他自定義對象。 可選關(guān)鍵字參數(shù)包括fix_導(dǎo)入、編碼和錯誤,這些參數(shù)用于控制由python 2生成的pickle流的兼容性支持。如果fix_imports為true,pickle將嘗試將舊的python 2名稱映射到python 3中使用的新名稱。編碼和錯誤告訴pickle如何解碼由python 2處理的8位字符串實例;它們分別默認為'ascii'和'strict'。編碼可以是“字節(jié)”,以將這些8位字符串實例讀取為字節(jié)對象。需要使用encoding='latin1'來取消拾取由python 2處理的numpy數(shù)組和date time、日期和時間實例。 pickle.loads(bytes_object,*,fix_imports = True,encoding =“ASCII”,errors =“strict” )
從bytes對象讀取pickled對象層次結(jié)構(gòu),并返回其中指定的重新構(gòu)建的對象層次結(jié)構(gòu)。 自動檢測pickle的協(xié)議版本,因此不需要協(xié)議參數(shù)。超過pickled對象表示形式的字節(jié)將被忽略。 可選關(guān)鍵字參數(shù)包括fix_導(dǎo)入、編碼和錯誤,這些參數(shù)用于控制由python 2生成的pickle流的兼容性支持。如果fix_imports為true,pickle將嘗試將舊的python 2名稱映射到python 3中使用的新名稱。編碼和錯誤告訴pickle如何解碼由python 2處理的8位字符串實例;它們分別默認為'ascii'和'strict'。編碼可以是“字節(jié)”,以將這些8位字符串實例讀取為字節(jié)對象。需要使用encoding='latin1'來取消拾取由python 2處理的numpy數(shù)組和date time、日期和時間實例。
|