0 h5py文件

一个h5py文件是 “dataset” 和 “group” 二合一的容器。
1. dataset ——> 可以类比成ndarray,包含了一些数据
2. group ——>可以类比成字典, 包含了其它 dataset 和 其它 group

我们可以把h5py文件类比成“文件夹”,以树形结构存储group和dataset

1 创建一个h5py文件

import h5py
import numpy as np

#创建一个h5py文件
f = h5py.File("mytestfile.hdf5", "w")
#和python打开文件的方式一样,可以有'w',有'a'

f.name
#'/'

#创建一个dataset
dset = f.create_dataset("mydataset", data=np.random.random((3,3)))
#这样的创建方式就会在根目录f下创建一个dataset,内容为data的内容

dset.name
#'/mydataset'
#即dset的绝对路径

在h5py文件中,任何的group对象也可以有create_dataset和create_group方法

grp = f.create_group("subgroup")
grp.name
#'/subgroup'

dset2 = grp.create_dataset("mydataset", data=np.random.random((3,3)))
dset2.name
#'/subgroup/mydataset'
#在grp上创建一个dataset

 当然,我们也不需要一步一步把中间的group创建出来,直接指定一个完整的目录也是ok的

dset3=f.create_dataset("grp3/mydataset", data=np.random.random((3,3)))
dset3.name
#'/grp3/mydataset'

 可以看到里面现在有三个group了

for i in f:
    print(i)

'''
grp3
mydataset
subgroup
'''

也可以用in来判断一个dataset或者一个group是否存在

'grp3' in f, 'grp2' in f
#(True, False)

#甚至完整路径都是可以的
'/subgroup/mydataset' in f
#True

 2 打印完整dataset和group路径

像前面的print只会返回他的直接成员,如果想要遍历整个文件的话,可以使用group方法visit,visititems

f.visit(print)
'''
grp3
grp3/mydataset
mydataset
subgroup
subgroup/mydataset
'''


f.visititems(print)
'''
grp3 <HDF5 group "/grp3" (1 members)>
grp3/mydataset <HDF5 dataset "mydataset": shape (3, 3), type "<f8">
mydataset <HDF5 dataset "mydataset": shape (3, 3), type "<f8">
subgroup <HDF5 group "/subgroup" (1 members)>
subgroup/mydataset <HDF5 dataset "mydataset": shape (3, 3), type "<f8">
'''

3 数据属性

        HDF5的一个最好的特点是,你可以在它描述的数据旁边存储元数据。所有的group和dataset都支持附加的名为属性的数据位。

        属性是通过attrs代理对象来访问的,它同样实现了字典接口。

dset2.attrs['num']=10
dset2.attrs['num']
#10

4 读取HDF

f = h5py.File('mytestfile.hdf5', 'r')

可以用前面的visit判断有哪些group,哪些dataset

查看某一个dataset的信息

f['mydataset']
#<HDF5 dataset "mydataset": shape (3, 3), type "<f8">

f['mydataset'][:]
'''
array([[0.63732368, 0.358404  , 0.10496838],
       [0.4456806 , 0.91168004, 0.01802787],
       [0.57025919, 0.67295068, 0.87238499]])
'''

参考资料:Quick Start Guide — h5py 3.6.0 documentation

python h5py详解_will-wil的博客-CSDN博客_h5py

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐