Python標準庫05 儲存物件 (pickle包,cPickle包)物件導向的基本概念物件導向的進一步拓展物件導向的基本概念文字檔的輸入輸出文字檔的輸入輸出

來源:互聯網
上載者:User

作者:Vamei 出處:http://www.cnblogs.com/vamei 歡迎轉載,也請保留這段聲明。謝謝!

謝謝reverland錯誤修正

在之前對Python對象的介紹中 (物件導向的基本概念,物件導向的進一步拓展),我提到過Python“一切皆對象”的哲學,在Python中,無論是變數還是函數,都是一個對象。當Python運行時,Object Storage Service在記憶體中,隨時等待系統的調用。然而,記憶體裡的資料會隨著電腦關機和消失,如何將對象儲存到檔案,並儲存在硬碟上呢?

電腦的記憶體中儲存的是二進位的序列 (當然,在Linux眼中,是文字資料流)。我們可以直接將某個對象所對應位置的資料抓取下來,轉換成文字資料流 (這個過程叫做serialize),然後將文字資料流存入到檔案中。由於Python在建立對象時,要參考對象的類定義,所以當我們從文本中讀取對象時,必須在手邊要有該對象的類定義,才能懂得如何去重建這一對象。從檔案讀取時,對於Python的內建(built-in)對象 (比如說整數、詞典、表等等),由於其類定義已經載入記憶體,所以不需要我們再在程式中定義類。但對於使用者自行定義的對象,就必須要先定義類,然後才能從檔案中載入對象 (比如物件導向的基本概念中的對象那個summer)。

 

1. pickle包
對於上述過程,最常用的工具是Python中的pickle包。

1) 將記憶體中的對象轉換成為文字資料流:

import pickle# define classclass Bird(object):    have_feather = True    way_of_reproduction  = 'egg'summer       = Bird()                 # construct an objectpicklestring = pickle.dumps(summer)   # serialize object

使用pickle.dumps()方法可以將對象summer轉換成了字串 picklestring(也就是文字資料流)。隨後我們可以用普通文本的儲存方法來將該字串儲存在檔案(文字檔的輸入輸出)。

 

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

import pickle

# define classclass Bird(object): have_feather = True way_of_reproduction = 'egg'summer = Bird() # construct an objectfn = 'a.pkl'with open(fn, 'w') as f: # open file with write-mode
picklestring = pickle.dump(summer, f) # serialize and save object

對象summer儲存在檔案a.pkl

 

2) 重建對象

首先,我們要從文本中讀出文本,儲存到字串 (文字檔的輸入輸出)。然後使用pickle.loads(str)的方法,將字串轉換成為對象。要記得,此時我們的程式中必須已經有了該對象的類定義。

 

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

import pickle# define the class before unpickleclass Bird(object):    have_feather = True    way_of_reproduction  = 'egg'fn     = 'a.pkl'with open(fn, 'r') as f:    summer = pickle.load(f)   # read file and build object

 

 

2. cPickle包

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

import cPickle as pickle

就不需要再做任何改動了。

 

總結:

對象 -> 文本 -> 檔案

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

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.