在python中保存和加载混合数据的最佳方式是什么



我在python中有混合数据,它由组成

  1. 一些字典和
  2. 某个numpy数组

我可以将第一部分保存为json,将第二部分保存为二进制npz。但是,我应该选择哪种格式将它们保存在一个文件中?

说清楚。

我有这样的东西:


import numpy as np
params = {
"param1": 1,
"param2": "abcd",
"param3": [1, 2, 3],
"param4": {
"subparam1": "e",
"subparam2": 3
}
}
data = np.random.uniform(0, 10, [3, 3])

并尝试将paramsdata保存到文件

def save(params, params_path, data, data_path):
with open(params_path, 'w') as f:
json.dump(params, f, indent=4)
np.savez(data_path, data=data)

我现在有两个文件,但我只想要一个。

我可以这样做:

def save_union(params, data, out_path):
data_npz = io.BytesIO()
np.savez_compressed(data_npz, data=data)
union_data = {
"params": params,
"data": base64.b64encode(data_npz.getvalue()).decode("utf-8")
}
with open(out_path, 'w') as f:
json.dump(union_data, f, indent=4)

但现在我有一个大文件,因为data是用base64编码的。

是否需要保存的数据具有可读性?如果没有,你可以试试泡菜https://docs.python.org/3/library/pickle.html

例如,请参阅相关问题:如何使用pickle保存dict?

(上面链接中来自@Blender的示例代码(

import pickle
a = {'hello': 'world'}
with open('filename.pickle', 'wb') as handle:
pickle.dump(a, handle, protocol=pickle.HIGHEST_PROTOCOL)
with open('filename.pickle', 'rb') as handle:
b = pickle.load(handle)
print(a == b)

最新更新