对于我们熟知的 pkl 文件,它具体优势以及适用范围是什么却不太明白,以前我们在读取文件的时候一般都用with open('xxx', 'r') as file:
,其中r
是用来打开文本类型文件,若要打开的是二进制类型文件,那就改为rb
。因为文件主要分为 文本类型 和 二进制类型。 pkl 文件则是二进制文件,其最主要的优势在于读取文件速度比其他例如json等格式快,通过import pickle
来生成 pkl 文件;但pickle的协议特定于Python,因此不保证跨语言兼容性。
1. 将array转化为pkl文件
import numpy as np
import pickle
A = np.random.randn(2, 2)
with open('test', 'wb') as f: #write
pickle.dump(A, f)
f.close()
with open('test', 'rb') as f:
A = pickle.load(f, encoding='bytes') #read
f.close()
print(A)
2. 将多个json文件转化为pkl文件
import pickle
import json
root = '/home/raywit/PycharmProjects/'
with open(root + 'training_xyz.json', 'r') as f:
a = np.array(json.load(f))
with open(root + 'k.json', 'r') as f:
fx = np.array(json.load(f))
with open(root + 'k1.json', 'r') as f:
fy = np.array(json.load(f))
with open(root + 'training_verts.json', 'r') as f:
gt = np.array(json.load(f))
list_data = {'training_xyz': a,
'k': fx,
'k1': fy,
'training_verts': gt}
with open("list_data", "wb") as fo: #write
pickle.dump(list_data, fo)
fo.close()
with open("list_data", "rb") as fo: #read
A = pickle.load(fo, encoding='bytes')
print(A['k'].shape)
注意: 上面则是先将json文件内容读取出来(我所用的json文件保存的是array,结构不复杂),再将内容转化为dict格式存到pkl中。