当前位置: 首页 > article >正文

保存复合型数据到h5文件

保存复合型数据到h5文件

HDF5

HDF5 是 Hierarchical Data Format version 5 的缩写,是一种用于存储和管理大量数据的文件格式
一个h5py文件可以看作是 “dataset” 和 “group” 二合一的容器
dataset : 数据集,像 numpy 数组一样工作
group : 包含了其它 dataset 和 其它 group

安装库

pip install h5py -i https://pypi.tuna.tsinghua.edu.cn/simple

导入库

import json
import h5py
import pandas as pd
import numpy as np
from filelock import FileLock

保存文件

def save_composite_data(filename, key, data, mode='w'):
    """
    保存复合型数据
    :param filename: 文件名
    :param key: 键名
    :param data: 数据
    :param mode: mode=w,写入,mode=a,追加
    :return:
    """
    try:
        serialized_data = json.dumps(data)

        # 创建一个新的 HDF5 文件
        with h5py.File(filename, mode) as f:
            # 创建一个可变长度的字节字符串数据集来存储序列化后的数据
            dset = f.create_dataset(key, (1,), dtype=h5py.special_dtype(vlen=bytes))
            # 存储序列化后的数据
            dset[0] = serialized_data
        return True
    except:
        return False

读取文件

def read_composite(filename):
    """
    读取复合型数据
    :param filename: 文件名
    :return:
    """
    # 读取数据并解析
    with h5py.File(filename, 'r') as f:
        # 读取序列化后的数据
        keys = list(f.keys())
        data = []
        for k in keys:
            d = json.loads(f[k][0])
            data.append(d)
        # print(data)

    return data

示例

filename = 'test.h5'
data_list = [
    {'id编号': '1', '姓名': '小明', '成绩': [87.5, 67, 88.5], '成绩': {'语文': 87.5}, {'数学': 88.5}},
    {'id编号': '2', '姓名': '小花', '成绩': [78, 93.5, 66.5], '成绩': {'语文': 78}, {'数学': 93.5}}]

# 保存
save_data(filename, data_list, mode='a')
# 读取
df = get_data(filename)
if df is not None:
    print(df)

http://www.kler.cn/a/518478.html

相关文章:

  • 2024年度总结:技术探索与个人成长的交织
  • 每日一题 427. 建立四叉树
  • 基于OpenCV实现的答题卡自动判卷系统
  • 网络模型简介:OSI七层模型与TCP/IP模型
  • WPS数据分析000006
  • Unity|小游戏复刻|见缝插针1(C#)
  • ptp同步时钟、ptp网络时间服务器、ptp主时钟、ptp从时钟、ptp精密同步时钟
  • 15 分布式锁和分布式session
  • ElasticSearch JavaRestClient查询之快速入门
  • antdesignvue统计数据源条数、计算某列合计值、小数计算不精确多了很多小数位
  • 媒体新闻发稿要求有哪些?什么类型的稿件更好通过?
  • navicat无法连接虚拟机的docker中的mysql
  • 理解C++编译时类型转换符:static_cast
  • 系统思考—复杂问题的根源分析
  • 技术之翼,创作之心
  • Java设计模式 十 装饰模式 (Decorator Pattern)
  • 2025,“鱿鱼游戏”闯入AI赛道
  • MySql精确匹配“,“分隔开的内容的函数语法
  • 探索Python GUI新选择:Flet库介绍与快速实践
  • Leetcode热题——移动零
  • [STM32 - 野火] - - - 固件库学习笔记 - - -十一.电源管理系统
  • ELK环境搭建
  • 在K8S中,如果后端NFS存储的IP发送变化如何解决?
  • 一个vue项目npm install失败的问题解决方案
  • 后端学习路线
  • Linux系统 C/C++编程基础——基于Qt的图形用户界面编程