import h5py
import numpy as np
with h5py.File("myCardiac.hdf5", "w") as f:
dset = f.create_dataset("mydataset", (100,), dtype = 'i')
grp = f.create_group("G:/Brain Data/Brain_calgary/")
我尝试了这段代码来创建一个hdf5文件。一个文件夹中有50个hhdf5文件。我想将所有50个hdf5文件合并成一个hdf5文件集。
发布于 2022-04-11 18:50:21
若要将50个.h5文件合并为一个大型数据集,每个文件具有一个名为kspace的数据集和表单(24、170、218、256),请使用以下代码:
import h5py
import os
with h5py.File("myCardiac.hdf5", "w") as f_dst:
h5files = [f for f in os.listdir() if f.endswith(".h5")]
dset = f_dst.create_dataset("mydataset", shape=(len(h5files), 24, 170, 218, 256), dtype='f4')
for i, filename in enumerate(h5files):
with h5py.File(filename) as f_src:
dset[i] = f_src["kspace"]
详细描述
首先,您必须创建一个目标文件myCardiac.hdf5
。然后获取目录中所有.h5文件的列表:
h5files = [f for f in os.listdir() if f.endswith(".h5")]
注意:不带参数的 os.listdir()
获取当前工作目录中的文件/foldes列表。我希望这个python脚本与文件位于同一个目录中,而CWD将被设置为这个目录。
下一步是在目标文件中创建具有所需大小和数据类型的数据集:
dset = f_dst.create_dataset("mydataset", shape=(len(h5files), 24, 170, 218, 256), dtype='f4')
然后,可以迭代地将数据从源文件复制到目标数据集。
for i, filename in enumerate(h5files):
with h5py.File(filename) as f_src:
dset[i] = f_src["kspace"]
发布于 2022-04-13 19:24:58
另一种方法是使用HDF5虚拟数据集在新文件中获取组合视图,而不重复数据。h5py参考资料。下面的示例是根据前面的答案改编的。见:将虚拟数据集读取到h5py数组中的NumPy错误。关于这一程序的说明:
glob.glob()
来使用通配符获取源文件名的列表(假设源文件名为:myCardiac_01.hdf5, myCardiac_02.hdf5, myCardiac_03.hdf5, etc
)。shape=(24,170,218,256)
的行为。酌情修改其他数据源。源代码:
import h5py
import glob
h5_files = glob.glob('myCardiac_0?.hdf5')
# Get parameters from source files to define virtual layout and dataset
a0 = len(h5_files)
with h5py.File(h5_files[0],'r') as h5f:
h5_dtype = h5f['kspace'].dtype
h5_shape = h5f['kspace'].shape
print(h5_dtype,h5_shape)
# Assemble virtual dataset
vs_layout = h5py.VirtualLayout(shape=((a0,)+h5_shape), dtype=h5_dtype)
for n, h5file in enumerate(h5_files):
vs_layout[n] = h5py.VirtualSource(h5file, 'kspace', shape=h5_shape)
# Add virtual dataset to output file
with h5py.File('myCardiac_VDS.h5', 'w') as f:
f.create_virtual_dataset('kspace_vdata', vs_layout)
# print some data slices from the virtual dataset
with h5py.File('myCardiac_VDS.h5', 'r') as f:
vds_ds = f['kspace_vdata']
print(vds_ds.dtype,vds_ds.shape)
for i in range(vds_ds.shape[0]):
print(f'Slice from file {i}:\n{vds_ds[i,:,0,0,0]}')
https://stackoverflow.com/questions/71831691
复制相似问题