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()