python库——h5py入门讲解

本文只是简单的对h5py库的基本创建文件,数据集和读取数据的方式进行介绍,作者刚接触h5py,完全靠看文档自学,如果哪里说的不对,欢迎纠正!如果读者需要进一步详细的学习h5py的更多知识,请参考h5py的官方文档

h5py简单介绍

h5py文件是存放两类对象的容器,数据集(dataset)和组(group),dataset类似数组类的数据集合,和numpy的数组差不多。group是像文件夹一样的容器,它好比python中的字典,有键(key)和值(value)。group中可以存放dataset或者其他的group。”键”就是组成员的名称,”值”就是组成员对象本身(组或者数据集),下面来看下如何创建组和数据集。

1. 创建一个h5py文件
 

import h5py
#要是读取文件的话,就把w换成r
f=h5py.File("myh5py.hdf5","w")

在当前目录下会生成一个myh5py.hdf5文件

2. 创建dataset数据集

import h5py 
f=h5py.File("myh5py.hdf5","w") 
#deset1是数据集的name,(20,)代表数据集的shape,i代表的是数据集的元素类型 d1=f.create_dataset("dset1", (20,), 'i') 
for key in f.keys(): 
    print(key) 
    print(f[key].name) 
    print(f[key].shape) 
    print(f[key].value) 
    输出: dset1 /dset1 (20,) [0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]

这里我们仅仅创建了一个存放20个整型元素的数据集,并没有赋值,默认全是0,如何赋值呢,看下面的代码。

import h5py 
import numpy as np 
f=h5py.File("myh5py.hdf5","w") 
d1=f.create_dataset("dset1",(20,),'i') 
#赋值 
d1[...]=np.arange(20) 
#或者我们可以直接按照下面的方式创建数据集并赋值 
f["dset2"]=np.arange(15) 
for key in f.keys(): 
    print(f[key].name) 
    print(f[key].value) 
输出:
/dset1 
[ 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19] 
/dset2 
[ 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14]

如果我们有现成的numpy数组,那么可以在创建数据集的时候就赋值,这个时候就不必指定数据的类型和形状了,只需要把数组名传给参数data。

import h5py
import numpy as np 
f=h5py.File("myh5py.hdf5","w") 
a=np.arange(20) 
d1=f.create_dataset("dset1",data=a) 
for key in f.keys(): 
    print(f[key].name) 
    print(f[key].value) 
输出: 
/dset1 
[ 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19]

现在把这几种创建的方式混合写下。看下面的代码

import h5py 
import numpy as np 
f=h5py.File("myh5py.hdf5","w") 
#分别创建dset1,dset2,dset3这三个数据集 
a=np.arange(20) 
d1=f.create_dataset("dset1",data=a) 

d2=f.create_dataset("dset2",(3,4),'i') 
d2[...]=np.arange(12).reshape((3,4)) 

f["dset3"]=np.arange(15) 

for key in f.keys(): 
    print(f[key].name) 
    print(f[key].value) 
输出: 
/dset1 
[ 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19] 
/dset2 
[[ 0  1  2  3]
 [ 4  5  6  7]
 [ 8  9 10 11]] 
/dset3 
[ 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14]

3. 创建group组

import h5py 
import numpy as np 
f=h5py.File("myh5py.hdf5","w") 
#创建一个名字为bar的组 
g1=f.create_group("bar") 

#在bar这个组里面分别创建name为dset1,dset2的数据集并赋值。 
g1["dset1"]=np.arange(10) 
g1["dset2"]=np.arange(12).reshape((3,4)) 
for key in g1.keys(): 
    print(g1[key].name) 
    print(g1[key].value) 
输出: 
/bar/dset1 
[0 1 2 3 4 5 6 7 8 9] 
/bar/dset2 
[[ 0  1  2  3]
 [ 4  5  6  7]
 [ 8  9 10 11]]

注意观察数据集dset1和dset2的名字是不是有点和前面的不一样,如果是直接创建的数据集,不在任何组里面,那么它的名字就是/+名字,现在这两个数据集都在bar这个group(组)里面,名字就变成了/bar+/名字,是不是有点文件夹的感觉!继续看下面的代码,你会对group和dataset的关系进一步了解。
 

import h5py 
import numpy as np 
f=h5py.File("myh5py.hdf5","w") 

#创建组bar1,组bar2,数据集dset 
g1=f.create_group("bar1") 
g2=f.create_group("bar2") 
d=f.create_dataset("dset",data=np.arange(10)) 

#在bar1组里面创建一个组car1和一个数据集dset1。 
c1=g1.create_group("car1") 
d1=g1.create_dataset("dset1",data=np.arange(10)) 

#在bar2组里面创建一个组car2和一个数据集dset2 
c2=g2.create_group("car2") 
d2=g2.create_dataset("dset2",data=np.arange(10)) 

#根目录下的组和数据集 print(".............") 
for key in f.keys(): 
    print(f[key].name) 

#bar1这个组下面的组和数据集 
print(".............") 
for key in g1.keys(): 
    print(g1[key].name) 

#bar2这个组下面的组和数据集 
print(".............") 
for key in g2.keys(): 
    print(g2[key].name) 

#顺便看下car1组和car2组下面都有什么,估计你都猜到了为空。 
print(".............") 
print(c1.keys()) 
print(c2.keys()) 
输出: 
............. 
/bar1 
/bar2 
/dset 
............. 
/bar1/car1 
/bar1/dset1 
............. 
/bar2/car2 
/bar2/dset2 
............. 
[] 
[]

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值