python讀取寫入pickle、npy格式檔案(程式碼+註釋)
阿新 • • 發佈:2021-02-03
技術標籤:Pythonpythonpicklenpy資料讀取與寫入
1 Pickle檔案
1.1 介紹
pickle模組可以對小資料量進行儲存。資料儲存在一個.pickle檔案中。pickle和資料庫都是為了方便儲存資料。
1.2 寫入pickle檔案
pickle可以將物件資料壓到一個檔案中,永久儲存。這樣在取用時,只需將該檔案中的資料取出。而不是每次都重新進過各種語句,處理得到物件資料。
pickle.dump(obj,file,protocal)
序列化物件,並將結果資料流寫入到檔案物件中。引數protocol是序列化模式,預設值為0,表示以文字的形式序列化。protocol的值還可以是1或2,表示以二進位制的形式序列化。
import pickle
d = dict(name='Bob', age=21, score=99)
with open('val.pickle', 'wb') as f:
pickle.dump(d, f)
1.3 讀取pickle檔案
pickle.load(file)
反序列化物件。將檔案中的資料解析為一個Python物件。
# 方法一
import pickle
file = open('/Data/Embedding/rel.voc.pickle','rb') # 以二進位制讀模式(rb)開啟pkl檔案
data = pickle.load(file) # 讀取儲存的pickle檔案
print(type(data)) # 檢視資料型別
for i, (k, v) in enumerate(data.items()): # 讀取字典中前十個鍵值對
if i in range(0, 10):
print(k, v)
結果截圖:
# 方法二
import pickle as pkl
test= pkl. load(open("fold-0.test.pickle","rb"))
print(type(test)) # 檢視資料型別
# 輸出:
<class 'list'>
test[0].__dict__
1.4 讀取後存入txt檔案
# 將字典資料存入txt檔案
f = open('/Data/Embedding/rel.voc.txt','w',encoding='utf-8') #以'w'方式開啟檔案
for k,v in data.items(): # 遍歷字典中的鍵值
s1 = str(k) # 把字典的值轉換成字元型
s2 = str(v) # 把字典的值轉換成字元型
f.write(s1 + ':' + s2 +'\n') # 一行一個鍵值對
f.close() # 關閉檔案
file.close()
# 將列表資料存入txt檔案
f = open('/mnt/data/sunqi/Work/KBQA-Adapter/Data/SQB/fold-0.vaild.txt','w',encoding='utf-8') #以'w'方式開啟檔案
for i in range(len(a)): # 遍歷列表
s = str(a[i].__dict__) # 一行一個dict
f.write(s +'\n')
f.close() # 關閉檔案
file.close()
2 npy檔案
2.1 介紹
.npy檔案是numpy專用的二進位制檔案。
np.load和np.save是讀寫磁碟陣列資料的兩個主要函式,預設情況下,陣列是以未壓縮的原始二進位制格式儲存在副檔名為.npy的檔案中。
2.2 寫入npy檔案
將陣列以二進位制格式儲存到磁碟。
import numpy as np
a=np.arange(5)
np.save('test.npy',a)
這樣在程式所在的資料夾就生成了一個test.npy檔案
2.3 讀取npy檔案
將test.npy檔案中的資料讀出來
import numpy as np
test=np.load('/Data/word.emb.nre.npy',encoding = "latin1") #載入檔案
print(type(test)) # 檢視資料型別
# 輸出:
<class 'numpy.ndarray'>
print(test.shape) # 檢視numpy.ndarray資料的維度
# 輸出:
(100003, 300)
print(test[0])
2.3 存入txt檔案
# 將numpy矩陣資料存入txt檔案
doc = open('/Data/word.emb.nre.txt', 'a') #開啟一個儲存檔案,並依次寫入
for i in range (len (test)):
doc.write(str(test[i])+'\n')
doc.close()