保存复合型数据到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)