如何用Python的h5py向已创建的HDF5文件追加数据?
如何向HDF5文件追加同结构数据
1. 先创建支持扩展的HDF5数据集
你之前的创建代码没有设置maxshape参数,导致生成的数据集是固定尺寸的,无法后续追加数据。需要修改创建逻辑,指定可扩展的维度(用None标记):
import h5py # 假设trainX形状为(2500, 100, 100, 40),trainY形状为(2500, 80) with h5py.File(save_path+'PIC200829_256x256x256x3_fast_sj1.hdf5', 'w') as db: # 创建可扩展的Predframes数据集,第一个维度允许动态扩容 db.create_dataset( 'Predframes', data=trainX, maxshape=(None, 100, 100, 40), # None表示该维度可无限扩展 compression='gzip' # 可选参数,启用压缩节省磁盘空间 ) # 同理创建可扩展的GdSignal数据集 db.create_dataset( 'GdSignal', data=trainY, maxshape=(None, 80), compression='gzip' )
2. 向已有数据集追加数据
打开文件时使用'a'模式(追加模式),通过resize扩展数据集尺寸后,将新数据写入扩展区域:
import h5py # 假设new_trainX是待追加的数据,形状(2500, 100, 100, 40) # new_trainY形状(2500, 80) with h5py.File(save_path+'PIC200829_256x256x256x3_fast_sj1.hdf5', 'a') as db: # 处理Predframes数据集 pred_ds = db['Predframes'] # 扩展第一个维度:原长度 + 新数据长度 pred_ds.resize(pred_ds.shape[0] + new_trainX.shape[0], axis=0) # 将新数据写入数据集末尾 pred_ds[-new_trainX.shape[0]:] = new_trainX # 处理GdSignal数据集 gd_ds = db['GdSignal'] gd_ds.resize(gd_ds.shape[0] + new_trainY.shape[0], axis=0) gd_ds[-new_trainY.shape[0]:] = new_trainY
关键注意事项
- 若之前已创建无
maxshape的固定尺寸数据集,无法直接追加,需重新生成支持扩展的数据集。 - 必须保证追加的数据与原数据集的维度完全匹配(除可扩展的第一个维度外),否则会触发维度不匹配错误。
- 使用
[-new_len:]切片可自动定位到数据集末尾,无需手动计算起始索引,简洁且不易出错。
内容的提问来源于stack exchange,提问作者Saran Zeb
相关产品推荐
相关产品推荐

