1. 程式人生 > >python資料構造序列讀取(一)——pickle與cPickle

python資料構造序列讀取(一)——pickle與cPickle

pickle與cPickle;兩者的關係:“cPickle – A faster pickle”   

       import cPickle as pickle

       常用函式:pickle.dump(data,handle,0 or 1 or 2)接受一個檔案控制代碼和一個數據物件作為引數[序列化]

                                                                             0:txt,1 ,2:老新二進位制

                         pickle.load(handle)[反序列化]

     【先f=open(,"wb")開啟一個檔案控制代碼,將資料按照自己想要的格式整理讀入】

一、dump: 將python物件序列化儲存到本地的檔案。【永久儲存】

>>> import cPickle
>>> data = range(1000)
>>> cPickle.dump(data,open("test\\data.pkl","wb")) 

        dump函式需要指定兩個引數,第一個是需要序列化的python物件名稱,第二個是本地的檔案,需要注意的是,在這裡需要使用open函式開啟一個檔案,並指定“寫”操作。

二、 load:載入本地檔案,恢復python物件

>>> data = cPickle.load(open("test\\data.pkl","rb"))

        同dump一樣,這裡需要使用open函式開啟本地的一個檔案,並指定“讀”操作

三、 dumps:將python物件序列化儲存到一個字串變數中【臨時儲存】

>>> data_string = cPickle.dumps(data)

四、 loads:從字串變數中載入python物件

>>> data = cPickle.loads(data_string)

例子:

# -*- coding: utf-8 -*- 
import pickle
# 也可以這樣:
# import cPickle as pickle 
obj = {"a": 1, "b": 2, "c": 3} 
# 將 obj 持久化儲存到檔案 tmp.txt 中
pickle.dump(obj, open("tmp.txt", "w")) 
# do something else ... 
# 從 tmp.txt 中讀取並恢復 obj 物件
obj2 = pickle.load(open("tmp.txt", "r")) 
print obj2

例子:神經網路中模型引數的儲存

if best_accuracy<val_accuracy:
    best_accuracy = val_accuracy
    cPickle.dump(model,open("./model.pkl","wb"))
import pickle

b=7
i=13000000
fa=99.056
s='中國人民 123abc'

f=open('sample_pickle.dat','wb')    #以寫模式開啟二進位制檔案
try:
    pickle.dump(b,f)    #物件個數
    pickle.dump(i,f)    #寫入整數
    pickle.dump(fa,f)    #寫入字串
except:
    print('寫檔案異常')
finally:
    f.close()

'''
使用pickle模組讀取'sample_pickle.dat'內的二進位制內容
'''
f=open('sample_pickle.dat','rb')
n=pickle.load(f)    #讀出檔案的資料個數
for i in range(n):
    x=pickle.load(f)
    print(x)
f.close()

'''輸出
13000000
99.056
中國人民 123abc

'''

將文字檔案轉化為二進位制檔案

'''
將文字檔案轉化為二進位制檔案
'''
with open('test.txt')as src,open('test_pickle.dat','wb')as dest:
    lines=src.readline()
    pickle.dump(len(lines),dest)
    for line in lines:
        pickle.dump(line,dest)
with open('test_pickle.dat','rb')as fp:
    n=pickle.load(fp)
    for i in range(n):
        print(pickle.load(fp))