python读写HDF5文件

关于HDF5文件点击 查看

概述

python读取HDF5的方式较多:

  • h5py
  • pandas

这里只介绍h5py方式

打开

语法

File(name, mode=None, driver=None, libver=None, userblock_size=None, **kwds)
参数
  • name:为文件名字符串,
  • mode:为打开文件的模式,
  • driver:可以指定一种驱动方式,如需进行并行 HDF5 操作,可设置为 ‘mpio’,
  • libver 可以指定使用的兼容版本,默认为 ‘earliest’,也可以指定为 ‘latest’,
  • userblock_size 以字节为单位指定一个在文件开头称作 user block 的数据块,一般不需要设置。
返回值

File对象

关于打开模式
  • r:只读,文件必须存在
  • r+:读写,文件必须存在
  • w:创建新文件写,已经存在的文件会被覆盖掉
  • w-:/ x 创建新文件写,文件如果已经存在则出错
  • a:打开已经存在的文件进行读写,如果不存在则创建一个新文件读写,此为默认的 mode

创建group

以类似目录路径的形式指明所创建 group

语法

create_group(self, name, track_order=False)
参数:
  • name:名字,
  • track_order: 为 True,则会跟踪在当前 group 下的 group 和 dataset 创建的先后顺序。该方法可以在打开的文件句柄(相当于 “/“ group)或者一个存在的 group 对象上调用,此时 name 的相对路径就是相对于此 group 的。

创建dataset

以类似文件路径的形式指明所创建 dataset

语法

create_dataset(self, name, shape=None, dtype=None, data=None, **kwds)
参数
  • name:名字,
  • shape:以一个 tuple 或 list 的形式指明创建 dataset 的 shape,用 “()” 指明标量数据的 shape,
  • dtype:指明所创建 dataset 的数据类型,可以为 numpy dtype 或者一个表明数据类型的字符串,
  • data:指明存储到所创建的 dataset 中的数据。如果 data 为 None,则会创建一个空的 dataset,此时 shape 和 dtype 必须设置;如果 data 不为 None,则 shape 和 dtype 可以不设置而使用 data 的 shape 和 dtype,但是如果设置的话,必须与 data 的 shape 和 dtype 兼容。

添加attribute

打开的文件句柄(相当于 “/“ group),group 和 dataset 上都可以创建 attribute,以类似于字典的操作方式创建和读取 attribute。

例子:读取tensorflow的h5文件

import h5py

path=r"C:\Users\mym\Desktop\hangkong.h5"
f=h5py.File(path,"r")

def show_members(f):
    # print(type(f))
    for key in f.keys():
        if isinstance(f.get(key),h5py._hl.group.Group):
            print("name: %s,\t\tkeys: %s"%(f.get(key).name,[item for item in f.get(key).keys()]))
        else:
            print("name: %s,\t\tshape: %s,\t\tvalue: %s"%(f.get(key).name,f.get(key).shape,f.get(key)[()]))

show_members(f.get("model_weights").get("conv2d_100").get("conv2d_100"))

例子:写文件

import h5py
import numpy as np
f=h5py.File(r"C:\Users\mym\Desktop\myh5py.hdf5","w")

#创建一个名字为bar的组
g1=f.create_group("bar")

#在bar这个组里面分别创建name为dset1,dset2的数据集并赋值。
g1["dset1"]=1
g1["dset2"]=np.arange(12).reshape((3,4))
g1["name"]="哈哈"

for key in g1.keys():
    print(g1[key].name)
    print(g1[key].value)

感谢

https://blog.csdn.net/zkp_987/article/details/79852236
https://www.cnblogs.com/weiyinfu/p/10740653.html
https://blog.csdn.net/menghaocheng/article/details/84918919


原文出处:/show_1EF4VtsD3vNS.html