日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪(fǎng)問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 综合教程 >内容正文

综合教程

Python标准库存储对象(pickle包,cPickle包)

發(fā)布時(shí)間:2023/12/13 综合教程 32 生活家
生活随笔 收集整理的這篇文章主要介紹了 Python标准库存储对象(pickle包,cPickle包) 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

作者:Vamei 出處:http://www.cnblogs.com/vamei 歡迎轉(zhuǎn)載,也請(qǐng)保留這段聲明。謝謝!

在之前對(duì)Python對(duì)象的介紹中 (面向?qū)ο蟮幕靖拍睿嫦驅(qū)ο蟮倪M(jìn)一步拓展),我提到過(guò)Python“一切皆對(duì)象”的哲學(xué),在Python中,無(wú)論是變量還是函數(shù),都是一個(gè)對(duì)象。當(dāng)Python運(yùn)行時(shí),對(duì)象存儲(chǔ)在內(nèi)存中,隨時(shí)等待系統(tǒng)的調(diào)用。然而,內(nèi)存里的數(shù)據(jù)會(huì)隨著計(jì)算機(jī)關(guān)機(jī)和消失,如何將對(duì)象保存到文件,并儲(chǔ)存在硬盤(pán)上呢?

計(jì)算機(jī)的內(nèi)存中存儲(chǔ)的是二進(jìn)制的序列 (當(dāng)然,在Linux眼中,是文本流)。我們可以直接將某個(gè)對(duì)象所對(duì)應(yīng)位置的數(shù)據(jù)抓取下來(lái),轉(zhuǎn)換成文本流(這個(gè)過(guò)程叫做serialize),然后將文本流存入到文件中。由于Python在創(chuàng)建對(duì)象時(shí),要參考對(duì)象的類(lèi)定義,所以當(dāng)我們從文本中讀取對(duì)象時(shí),必須在手邊要有該對(duì)象的類(lèi)定義,才能懂得如何去重建這一對(duì)象。從文件讀取時(shí),對(duì)于Python的內(nèi)建(built-in)對(duì)象 (比如說(shuō)整數(shù)、詞典、表等等),由于其類(lèi)定義已經(jīng)載入內(nèi)存,所以不需要我們?cè)僭诔绦蛑卸x類(lèi)。但對(duì)于用戶(hù)自行定義的對(duì)象,就必須要先定義類(lèi),然后才能從文件中載入對(duì)象 (比如面向?qū)ο蟮幕靖拍钪械膶?duì)象那個(gè)summer)。

1. pickle包
對(duì)于上述過(guò)程,最常用的工具是Python中的pickle包。

1) 將內(nèi)存中的對(duì)象轉(zhuǎn)換成為文本流:

import pickle

# 定義類(lèi)
class Bird(object):
    have_feather = True
    way_of_reproduction  = 'egg'

summer      = Bird()                 # 創(chuàng)建對(duì)象
picklestring = pickle.dumps(summer)   # serialize object

使用pickle.dumps()方法可以將對(duì)象summer轉(zhuǎn)換成了字符串 picklestring(也就是文本流)。隨后我們可以用普通文本的存儲(chǔ)方法來(lái)將該字符串儲(chǔ)存在文件(文本文件的輸入輸出)。

當(dāng)然,我們也可以使用pickle.dump()的方法,將上面兩部合二為一:

import pickle

# 定義類(lèi) class Bird(object): have_feather = True way_of_reproduction = 'egg' summer = Bird() # 創(chuàng)建對(duì)象 fn = 'a.pkl' picklestring = pickle.dump(summer, fn) # serialize and save object

對(duì)象summer存儲(chǔ)在文件a.pkl

2)重建對(duì)象

首先,我們要從文本中讀出文本,存儲(chǔ)到字符串 (文本文件的輸入輸出)。然后使用pickle.loads(str)的方法,將字符串轉(zhuǎn)換成為對(duì)象。要記得,此時(shí)我們的程序中必須已經(jīng)有了該對(duì)象的類(lèi)定義。

此外,我們也可以使用pickle.load()的方法,將上面步驟合并:

import pickle

# 在讀取之前必須定義類(lèi),這個(gè)類(lèi)與我們要讀取的對(duì)象一致。
class Bird(object):
    have_feather = True
    way_of_reproduction  = 'egg'

fn     = 'a.pkl'
summer = pickle.load(fn)   # read file and build object

2. cPickle包

cPickle包的功能和用法與pickle包幾乎完全相同 (其存在差別的地方實(shí)際上很少用到),不同在于cPickle是基于c語(yǔ)言編寫(xiě)的,速度是pickle包的1000倍。對(duì)于上面的例子,如果想使用cPickle包,我們都可以將import語(yǔ)句改為:

import cPickle as pickle

就不需要再做任何改動(dòng)了。

總結(jié):

對(duì)象 -> 文本 -> 文件

pickle.dump(), pickle.load(), cPickle

作者:Vamei 出處:http://www.cnblogs.com/vamei 歡迎轉(zhuǎn)載,也請(qǐng)保留這段聲明。謝謝!


標(biāo)簽:Python

作者:Leo_wl
    出處:http://www.cnblogs.com/Leo_wl/
    本文版權(quán)歸作者和博客園共有,歡迎轉(zhuǎn)載,但未經(jīng)作者同意必須保留此段聲明,且在文章頁(yè)面明顯位置給出原文連接,否則保留追究法律責(zé)任的權(quán)利。
版權(quán)信息

總結(jié)

以上是生活随笔為你收集整理的Python标准库存储对象(pickle包,cPickle包)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。