pickle模块可以对小数据量进行存储。数据存储在一个.pickle文件中。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)`
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)) # 查看数据类型 输出: test[0].__dict__`
`# 将字典数据存入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()`
.npy文件是numpy专用的二进制文件。
np.load和np.save是读写磁盘数组数据的两个主要函数,默认情况下,数组是以未压缩的原始二进制格式保存在扩展名为.npy的文件中。
将数组以二进制格式保存到磁盘。
`import numpy as np` `a=np.arange(5)` `np.save('test.npy',a)`
这样在程序所在的文件夹就生成了一个test.npy文件
将test.npy文件中的数据读出来
import numpy as np test=np.load('/Data/word.emb.nre.npy',encoding = "latin1") #加载文件 print(type(test)) # 查看数据类型 输出: print(test.shape) # 查看numpy.ndarray数据的维度 输出: (100003, 300) print(test[0])`
# 将numpy矩阵数据存入txt文件 doc = open('/Data/word.emb.nre.txt', 'a') #打开一个存储文件,并依次写入 for i in range (len (test)): doc.write(str(test[i])+'\n') doc.close()`