python核心模塊之pickle和cPickle講解
來源:程序員人生 發(fā)布時(shí)間:2014-11-21 09:05:19 閱讀次數(shù):3023次
pickle模塊使用的數(shù)據(jù)格式是python專用的,并且不同版本不向后兼容,同時(shí)也不能被其他語言說辨認(rèn)。要和其他語言交互,可使用內(nèi)置的json包使用pickle模塊你可以把Python
對象直接保存到文件,而不需要把他們轉(zhuǎn)化為字符串,也不用底層的文件訪問操作把它們寫入到1個(gè)2進(jìn)制文件里。
pickle模塊會(huì)創(chuàng)建1個(gè)python語言專用的2進(jìn)制格式,你基本上不用斟酌任何文件細(xì)節(jié),它會(huì)幫你干凈爽利地完成讀寫?yīng)毾聿僮鳎?需要的只是1個(gè)合法的文件句柄。
pickle模塊中的兩個(gè)主要函數(shù)是dump()和load()。dump()函數(shù)接受1個(gè)文件句柄和1個(gè)數(shù)據(jù)對象作為參數(shù),把數(shù)據(jù)對象以特定的格式保存到給定的文件中。當(dāng)我們使用load()函數(shù)從文件中取出已保存的對象時(shí),pickle知道如何恢復(fù)這些對象到它們本來的格式。
dumps()函數(shù)履行和dump() 函數(shù)相同的序列化。取代接受流對象并將序列化后的數(shù)據(jù)保存到磁盤文件,這個(gè)函數(shù)簡單的返回序列化的數(shù)據(jù)。
loads()函數(shù)履行和load() 函數(shù)1樣的反序列化。取代接受1個(gè)流對象并去文件讀取序列化后的數(shù)據(jù),它接受包括序列化后的數(shù)據(jù)的str對象, 直接返回的對象。
cPickle是pickle得1個(gè)更快得C語言編譯版本。
pickle和cPickle相當(dāng)于java的序列化和反序列化操作
#! /usr/local/env python
# -*- coding=utf⑻ -*-
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 讀寫到2進(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)存(字符串格式保存),然后對象可以以任何方式處理如通過網(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óng)辛苦
如果您覺得本網(wǎng)站對您的學(xué)習(xí)有所幫助,可以手機(jī)掃描二維碼進(jìn)行捐贈(zèng)
------分隔線----------------------------
------分隔線----------------------------