1. 程式人生 > 其它 >python讀取寫入pickle、npy格式檔案(程式碼+註釋)

python讀取寫入pickle、npy格式檔案(程式碼+註釋)

技術標籤: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()