h5py用法

转发:https://blog.csdn.net/qq_34859482/article/details/80115237

  1. h5py 文件介绍

一个h5py文件是 “dataset” 和 “group” 二合一的容器。
1. dataset : 类似数组组织的数据的集合,像 numpy 数组一样工作
2. group : 包含了其它 dataset 和 其它 group ,像字典一样工作

看下图:
这里写图片描述

通过上图,我们可以知道 h5py 文件就像是文件夹一样,里面很放文件还有文件夹,主文件夹以 ‘/’ 开始,这又像Linux的树形结构。知道这些我们就可以开始向 h5py 文件读取或者写入了。

2. 写入数据

根据上面的了解,我们开始创建一个h5py文件并写入数据:

import h5py

“”"
create_dataset : 新建 dataset
create_group : 新建 group
“”"

x = np.arange(100)

with h5py.File(‘test.h5’,‘w’) as f:
f.create_dataset(‘test_numpy’,data=x)
subgroup = f.create_group(‘subgroup’)
subgroup.create_dataset(‘test_numpy’,data=x)
subsub = subgroup.create_group(‘subsub’)
subsub.create_dataset(‘test_numpy’,data=x)

代码讲解:以上面的结构图进行讲解,我们以写的模式新建了一个 test.h5 的 h5py 文件,然后我们新建了一个文件叫 test_numpy 并写入了预先准备好的 numpy array .接着新建一个文件夹叫 subgroup 并在里面也新建同样的 test_numpy 文件,又在里面新建了一个叫 subsub 的文件夹 ….

可以发现这真的就跟我们平时操作文件夹没有什么区别。

3. 读取数据

"""
    keys() : 获取本文件夹下所有的文件及文件夹的名字
    f['key_name'] : 获取对应的对象    
"""
def read_data(filename):
    with h5py.File(filename,'r') as f:
    <span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">print_name</span><span class="hljs-params">(name)</span>:</span>
        print(name)
    f.visit(print_name)
    print(<span class="hljs-string">'---------------------------------------'</span>)
    subgroup = f[<span class="hljs-string">'subgroup'</span>]  
    print(subgroup.keys())
    print(<span class="hljs-string">'---------------------------------------'</span>)
    dset = f[<span class="hljs-string">'test_numpy'</span>]
    print(dset)
    print(dset.name)
    print(dset.shape)
    print(dset.dtype)
    print(dset[:])
    print(<span class="hljs-string">'---------------------------------------'</span>)

read_data(‘test.h5’)

输出结果:
这里写图片描述

跟我们预期的一样,主文件 / 下有 subgroup 和 test_numpy 而 /subgroup 下又有两个对象,对应的就是我们上面新建的。dataset 的使用也确实跟 numpy 数组相似。总之,你可以像使用 numpy 数组一样使用 dataset ,使用 字典 一样使用 group 。

4. 总结

前面说了 dataset 是类 numpy array 所以,你能写进的数据 只能只能只能 是数组,如果你想存入其他的数据,参考下面的实现。

4.1 如何存储字符串

确定存储的数据类型,python3 vlen = str ,python 2 vlen=unicode
新建数据库后,明确数组的维度,传入类型,再赋值。

dt = h5py.special_dtype(vlen=str)
data = np.array([['123'],['456']])
with h5py.File('testdict.h5','w') as f:
    ds = f.create_dataset('test_dict', data.shape , dtype=dt)
    ds[:] = data

 
 
  • 4.2 如何存储ASCII

    跟上面类似

    dt = h5py.special_dtype(vlen=bytes)
    

    最后献上 h5py文档

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值