python資料構造序列讀取(一)——pickle與cPickle
阿新 • • 發佈:2018-12-12
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))