【问题标题】:What is the best way to save and load mixture data in python?在 python 中保存和加载混合数据的最佳方法是什么?
【发布时间】:2022-01-18 20:40:09
【问题描述】:

我在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 编码。

【问题讨论】:

  • “字典列表”是什么意思?
  • 某事:list[dict[str, Any]]

标签: python json numpy


【解决方案1】:

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

例子请看相关问题:How can I use pickle to save a 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)

【讨论】:

  • print 是 Python 3 中的函数,不能以这种方式工作 print a == b
猜你喜欢
  • 2014-05-29
  • 1970-01-01
  • 2010-11-10
  • 1970-01-01
  • 2010-09-12
  • 2018-06-16
  • 2021-01-17
  • 2020-11-03
  • 2016-11-21
相关资源
最近更新 更多