python的h5py包

文章目录

  • 写在前面
  • 正文
    • 预备工作
    • 简单认识hdf5——hdf5的数据格式
    • hdf5的数据格式介绍完了,练练手吧
      • 例1——生成hdf5文件,创建dataset
      • 例2——更多种的创建方式
      • 例3——修改数据
      • 例4——试试组(group)
      • 例5——综合例子
      • 例6——读文件

写在前面

本文只适用于初学者,仅涉及文件的写入和读取,其他的部分可以参照官网。

正文

预备工作

hdf5官网:https://www.hdfgroup.org/solutions/hdf5/
hdf5文件是一种数据存储格式,Python有相应的包——h5py。
最好先下载HDFviewer
就是下面这个
python的h5py包_第1张图片
下载地址:https://www.hdfgroup.org/downloads/hdfview/
测试环境:Ubuntu16.04

简单认识hdf5——hdf5的数据格式

网上找了一些教程,包括官网的也浏览了一遍,写的都没毛病,但是让人理解的不是那么透彻。
这里打一个比方:

在没有电脑的时候,我们记录文件都是在纸上。可以说一张纸,是记录数据的基本单位。然而纸质文件多了,就需要分类,这时候就有了文件袋。文件袋多了,可以有文件柜。文件柜多了就可以有储藏室。以此类推,对于某个纸质文件,总能放在对应的位置。这种层级管理方式,放在电脑上就是文件(对应纸)和文件夹(文件袋,文件柜,储藏室等等以此类推)的关系。

hdf5文件的数据结构其实很简单,跟电脑上文件的储存方式一毛一样——文件文件夹

所不同的是,hdf5把文件文件夹起了另外的名字——数据集(dataset)组(group)

之所以基本单位叫数据集是因为hdf5是专门存储数据的,之所以叫就是分个组而已。。别想太多,真的就是这么简单。

hdf5的数据格式介绍完了,练练手吧

例1——生成hdf5文件,创建dataset

创建名为test的hdf5文件,写入一个内容为1-5的dataset,这个dataset命名为dset1

import h5py
import numpy as np

f=h5py.File("test","w")  # f是这个hdf5文件的句柄,test是文件名(生成test.hdf5,即,文件名不用加拓展名),“w"是可写
d1=f.create_dataset("dset1",data=np.arange(5)) # d1是dset的句柄,不做后续操作的话可以不要,不明白的话看了后文就晓得了

运行一下,可以看到生成了test.hdf5
python的h5py包_第2张图片
用HDFviewer打开(打开后双击dset1)

例2——更多种的创建方式

更多种方式生成dataset
笔者总结了一下,好用的基本也就2种方法,上面的算一个,第二个写在下面,权当总结了。

import h5py
import numpy as np

f=h5py.File("test","w")
# method1
d1=f.create_dataset("dset1",data=np.arange(5))  # 返回一个dataset的句柄

# method2
f["dset2"]=np.arange(10).reshape(2,5)  # 这种方式木有返回值

自己打开文件看一下,会瞬间明白,后文所有代码运行过后都看看,都会秒懂,不再贴图

例3——修改数据

修改数据
已经生成的数据想修改咋整?——①通过dataset的句柄②通过索引

import h5py
import numpy as np

f=h5py.File("test","w")
# method1
d1=f.create_dataset("dset1",data=np.arange(5))

# method2
f["dset2"]=np.arange(10).reshape(2,5)

# method1
d1[...]=np.arange(5)+10
# method2
f["dset2"][0]=100

例4——试试组(group)

创建一个名为folder1的组,里面装2个dataset(后文folder误打成了floder)

import h5py
import numpy as np

f=h5py.File("test2","w")
g1=f.create_group("floder1")

g1["dset1"]=np.arange(10)
g1["dset2"]=np.arange(12).reshape(3,4)

例5——综合例子

生成如下结构的hdf5文件,数据随意(后文folder误打成了floder)
python的h5py包_第3张图片

import h5py
import numpy as np

f=h5py.File("test3", "w")

g1=f.create_group("folder1")
g2=f.create_group("floder2")

f.create_dataset("dset",data=np.arange(10))

gg1=g1.create_group("floder1_sub")
d1=g1.create_dataset("dset1",data=np.arange(10))

gg2=g2.create_group("floder2_sub")
d2=g2.create_dataset("dset2",data=np.arange(30).reshape(2,5,3))

例6——读文件

把hdf5文件的数据读进numpy里

import h5py
import numpy as np

data = h5py.File("./test3", "r")  # .hdf5 object

print(data)
p=np.asarray(data["dset"])
pp=np.asarray(data["floder2"]["dset2"])
print(p)
print(pp)
<HDF5 file "test3" (mode r)>
[0 1 2 3 4 5 6 7 8 9]
[[[ 0  1  2]
  [ 3  4  5]
  [ 6  7  8]
  [ 9 10 11]
  [12 13 14]]

 [[15 16 17]
  [18 19 20]
  [21 22 23]
  [24 25 26]
  [27 28 29]]]

你可能感兴趣的:(python的h5py包)