python中cPickle類使用方法詳解
在python中,一般可以使用pickle類來進(jìn)行python對(duì)象的序列化,而cPickle提供了一個(gè)更快速簡單的接口,如python文檔所說的:“cPickle – A faster pickle”。
cPickle可以對(duì)任意一種類型的python對(duì)象進(jìn)行序列化操作,比如list,dict,甚至是一個(gè)類的對(duì)象等。而所謂的序列化,我的粗淺的理解就是為了能夠完整的保存并能夠完全可逆的恢復(fù)。在cPickle中,主要有四個(gè)函數(shù)可以做這一工作,下面使用例子來介紹。
1. dump: 將python對(duì)象序列化保存到本地的文件
import cPickle data = range(1000) cPickle.dump(data,open("test\\data.pkl","wb"))
dump函數(shù)需要指定兩個(gè)參數(shù),第一個(gè)是需要序列化的python對(duì)象名稱,第二個(gè)是本地的文件,需要注意的是,在這里需要使用open函數(shù)打開一個(gè)文件,并指定“寫”操作
2. load:載入本地文件,恢復(fù)python對(duì)象
data = cPickle.load(open("test\\data.pkl","rb"))
同dump一樣,這里需要使用open函數(shù)打開本地的一個(gè)文件,并指定“讀”操作
3. dumps:將python對(duì)象序列化保存到一個(gè)字符串變量中
data_string = cPickle.dumps(data)
4. loads:從字符串變量中載入python對(duì)象
data = cPickle.loads(data_string)
5. pickle模塊使用的數(shù)據(jù)格式是python專用的,并且不同版本不向后兼容,同時(shí)也不能被其他語言說識(shí)別。要和其他語言交互,可以使用內(nèi)置的json包
使用pickle模塊你可以把Python對(duì)象直接保存到文件,而不需要把他們轉(zhuǎn)化為字符串,也不用底層的文件訪問操作把它們寫入到一個(gè)二進(jìn)制文件里。 pickle模塊會(huì)創(chuàng)建一個(gè)python語言專用的二進(jìn)制格式,你基本上不用考慮任何文件細(xì)節(jié),它會(huì)幫你干凈利落地完成讀寫?yīng)毾聿僮鳎ㄒ恍枰闹皇且粋€(gè)合法的文件句柄。
pickle模塊中的兩個(gè)主要函數(shù)是dump()和load()。dump()函數(shù)接受一個(gè)文件句柄和一個(gè)數(shù)據(jù)對(duì)象作為參數(shù),把數(shù)據(jù)對(duì)象以特定的格式保存 到給定的文件中。當(dāng)我們使用load()函數(shù)從文件中取出已保存的對(duì)象時(shí),pickle知道如何恢復(fù)這些對(duì)象到它們本來的格式。
- dumps()函數(shù)執(zhí)行和dump() 函數(shù)相同的序列化。取代接受流對(duì)象并將序列化后的數(shù)據(jù)保存到磁盤文件,這個(gè)函數(shù)簡單的返回序列化的數(shù)據(jù)。
- loads()函數(shù)執(zhí)行和load() 函數(shù)一樣的反序列化。取代接受一個(gè)流對(duì)象并去文件讀取序列化后的數(shù)據(jù),它接受包含序列化后的數(shù)據(jù)的str對(duì)象, 直接返回的對(duì)象。
cPickle是pickle得一個(gè)更快得C語言編譯版本。
pickle和cPickle相當(dāng)于java的序列化和反序列化操作
#! /usr/local/env python # -*- coding=utf-8 -*- if __name__ == "__main__": import cPickle #序列化到文件 obj = 123,"abcdedf",["ac",123],{"key":"value","key1":"value1"} print obj #輸出:(123, 'abcdedf', ['ac', 123], {'key1': 'value1', 'key': 'value'}) #r+ 讀寫權(quán)限 r+b 讀寫到二進(jìn)制文件 f = open(r"d:\a.txt","r+") cPickle.dump(obj,f) f.close() f = open(r"d:\a.txt") print cPickle.load(f) #輸出:(123, 'abcdedf', ['ac', 123], {'key1': 'value1', 'key': 'value'}) #序列化到內(nèi)存(字符串格式保存),然后對(duì)象可以以任何方式處理如通過網(wǎng)絡(luò)傳輸 obj1 = cPickle.dumps(obj) print type(obj1) #輸出:<type 'str'> print obj1 #輸出:python專用的存儲(chǔ)格式 obj2 = cPickle.loads(obj1) print type(obj2) #輸出:<type 'tuple'> print obj2 #輸出:(123, 'abcdedf', ['ac', 123], {'key1': 'value1', 'key': 'value'})
以上就是本文的全部內(nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
python中的繼承機(jī)制super()函數(shù)詳解
這篇文章主要介紹了python中的繼承機(jī)制super()函數(shù)詳解,super 是用來解決多重繼承問題的,直接用類名調(diào)用父類方法在使用單繼承的時(shí)候沒問題,但是如果使用多繼承,會(huì)涉及到查找順序、重復(fù)調(diào)用等問題,需要的朋友可以參考下2023-08-08詳解python常用命令行選項(xiàng)與環(huán)境變量
這篇文章主要介紹了python常用命令行選項(xiàng)與環(huán)境變量,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-02-02基于Python實(shí)現(xiàn)評(píng)論區(qū)抽獎(jiǎng)功能詳解
這篇文章主要為大家介紹了基于Python如何實(shí)現(xiàn)評(píng)論區(qū)抽獎(jiǎng)的功能,文章的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)Python有一定幫助,需要的朋友可以學(xué)習(xí)一下2021-12-12詳解如何使用opencv實(shí)現(xiàn)圖片相似度檢測
這篇文章主要為大家詳細(xì)介紹了如何使用opencv實(shí)現(xiàn)圖片相似度檢測,文中的示例代碼講解詳細(xì),對(duì)于我們學(xué)習(xí)人工智能有一定的幫助,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2023-12-12