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


h5py简单介绍

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

1. 创建一个h5py文件

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

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

2. 创建dataset数据集

  1. import h5py
  2. f=h5py.File("myh5py.hdf5","w")
  3. #deset1是数据集的name,(20,)代表数据集的shape,i代表的是数据集的元素类型
  4. d1=f.create_dataset("dset1", (20,), 'i')
  5. for key in f.keys():
  6. print(key)
  7. print(f[key].name)
  8. print(f[key].shape)
  9. print(f[key].value)
  10. 输出:
  11. dset1
  12. /dset1
  13. (20,)
  14. [0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]

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

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

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

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

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

  1. import h5py
  2. import numpy as np
  3. f=h5py.File("myh5py.hdf5","w")
  4. #分别创建dset1,dset2,dset3这三个数据集
  5. a=np.arange(20)
  6. d1=f.create_dataset("dset1",data=a)
  7. d2=f.create_dataset("dset2",(3,4),'i')
  8. d2[...]=np.arange(12).reshape((3,4))
  9. f["dset3"]=np.arange(15)
  10. for key in f.keys():
  11. print(f[key].name)
  12. print(f[key].value)
  13. 输出:
  14. /dset1
  15. [ 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19]
  16. /dset2
  17. [[ 0 1 2 3]
  18. [ 4 5 6 7]
  19. [ 8 9 10 11]]
  20. /dset3
  21. [ 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14]

3. 创建group组

  1. import h5py
  2. import numpy as np
  3. f=h5py.File("myh5py.hdf5","w")
  4. #创建一个名字为bar的组
  5. g1=f.create_group("bar")
  6. #在bar这个组里面分别创建name为dset1,dset2的数据集并赋值。
  7. g1["dset1"]=np.arange(10)
  8. g1["dset2"]=np.arange(12).reshape((3,4))
  9. for key in g1.keys():
  10. print(g1[key].name)
  11. print(g1[key].value)
  12. 输出:
  13. /bar/dset1
  14. [0 1 2 3 4 5 6 7 8 9]
  15. /bar/dset2
  16. [[ 0 1 2 3]
  17. [ 4 5 6 7]
  18. [ 8 9 10 11]]

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

  1. import h5py
  2. import numpy as np
  3. f=h5py.File("myh5py.hdf5","w")
  4. #创建组bar1,组bar2,数据集dset
  5. g1=f.create_group("bar1")
  6. g2=f.create_group("bar2")
  7. d=f.create_dataset("dset",data=np.arange(10))
  8. #在bar1组里面创建一个组car1和一个数据集dset1。
  9. c1=g1.create_group("car1")
  10. d1=g1.create_dataset("dset1",data=np.arange(10))
  11. #在bar2组里面创建一个组car2和一个数据集dset2
  12. c2=g2.create_group("car2")
  13. d2=g2.create_dataset("dset2",data=np.arange(10))
  14. #根目录下的组和数据集
  15. print(".............")
  16. for key in f.keys():
  17. print(f[key].name)
  18. #bar1这个组下面的组和数据集
  19. print(".............")
  20. for key in g1.keys():
  21. print(g1[key].name)
  22. #bar2这个组下面的组和数据集
  23. print(".............")
  24. for key in g2.keys():
  25. print(g2[key].name)
  26. #顺便看下car1组和car2组下面都有什么,估计你都猜到了为空。
  27. print(".............")
  28. print(c1.keys())
  29. print(c2.keys())
  30. 输出:
  31. .............
  32. /bar1
  33. /bar2
  34. /dset
  35. .............
  36. /bar1/car1
  37. /bar1/dset1
  38. .............
  39. /bar2/car2
  40. /bar2/dset2
  41. .............
  42. []
  43. []

python库——h5py入门讲解的更多相关文章

  1. Python 数据处理库 pandas 入门教程

    Python 数据处理库 pandas 入门教程2018/04/17 · 工具与框架 · Pandas, Python 原文出处: 强波的技术博客 pandas是一个Python语言的软件包,在我们使 ...

  2. Python简单爬虫入门三

    我们继续研究BeautifulSoup分类打印输出 Python简单爬虫入门一 Python简单爬虫入门二 前两部主要讲述我们如何用BeautifulSoup怎去抓取网页信息以及获取相应的图片标题等信 ...

  3. 顶级Python库

    绝不能错过的24个顶级Python库 Python有以下三个特点: · 易用性和灵活性 · 全行业高接受度:Python无疑是业界最流行的数据科学语言 · 用于数据科学的Python库的数量优势 事实 ...

  4. 《Python编程:从入门到实践》分享下载

    书籍信息 书名:<Python编程:从入门到实践> 原作名:Python Crash Course 作者: [美] 埃里克·马瑟斯 豆瓣评分:9.1分(2534人评价) 内容简介 本书是一 ...

  5. 想学Python不知如何入门,教你!

    一.入门引导   想必有很多小伙伴想学习Python,又不知道如何入门,总觉得学习一定要头悬梁,锥刺股!NO,今天给大家分享下如何轻松入门Python!   首先,我们要学习Python,那一定要和你 ...

  6. Mysql C语言API编程入门讲解

    原文:Mysql C语言API编程入门讲解 软件开发中我们经常要访问数据库,存取数据,之前已经有网友提出让鸡啄米讲讲数据库编程的知识,本文就详细讲解如何使用Mysql的C语言API进行数据库编程.   ...

  7. python爬虫如何入门

    学爬虫是循序渐进的过程,作为零基础小白,大体上可分为三个阶段,第一阶段是入门,掌握必备的基础知识,第二阶段是模仿,跟着别人的爬虫代码学,弄懂每一行代码,第三阶段是自己动手,这个阶段你开始有自己的解题思 ...

  8. Python 30分钟入门指南

    Python 30分钟入门指南 为什么 OIer 要学 Python? Python 语言特性简洁明了,使用 Python 写测试数据生成器和对拍器,比编写 C++ 事半功倍. Python 学习成本 ...

  9. Python编程从入门到实践笔记——类

    Python编程从入门到实践笔记——类 #coding=gbk #Python编程从入门到实践笔记——类 #9.1创建和使用类 #1.创建Dog类 class Dog():#类名首字母大写 " ...

随机推荐

  1. getpass不起作用

    #! /usr/bin/env python# -*- coding:utf-8 -*- # login 模块中登录时输入密码,想用getPass模块实现密码的不回显操作.#如下: import ge ...

  2. 142. O(1)时间检测2的幂次

    用 O(1) 时间检测整数 n 是否是 2 的幂次. 您在真实的面试中是否遇到过这个题? Yes 样例 n=4,返回 true; n=5,返回 false. class Solution { publ ...

  3. DBAplus社群线上分享----Sharding-Sphere之Proxy初探

    功能 Cobar Mycat Heisenberg Shark TDDL Sharding-JDBC 是否开源 开源 开源 开源 开源 部分开源 开源 架构模型 Proxy架构 Proxy架构 Pro ...

  4. jQuery测试

    1.在div元素中,包含了一个<span>元素,通过has选择器获取<div>元素中的<span>元素的语法是? 提示使用has() $("div&quo ...

  5. python简单脚本-sql字符提取

    a="""dr.GetStr("kh"), dr.GetStr("xm"), dr.GetStr("xh"), ...

  6. 【持续更新】JS 时间与日期

    JS 的日期时间在项目中是必定会用到的,所以必须掌握. UTC 与 GMT 背景 十七世纪,格林威治皇家天文台为了海上霸权的扩张计画而进行天体观测.1675年旧皇家观测所(Old Royal Obse ...

  7. kafka系列一:单节点伪分布式集群搭建

    Kafka集群搭建分为单节点的伪分布式集群和多节点的分布式集群两种,首先来看一下单节点伪分布式集群安装.单节点伪分布式集群是指集群由一台ZooKeeper服务器和一台Kafka broker服务器组成 ...

  8. 【学习笔记】八:浏览器对象模型BOM

    1.window对象 window是BOM的核心,它既是JS访问浏览器的一个接口,又是ES规定的Global对象. 1)全局作用域对象 a.所有在全局作用域中声明的变量.函数都会成为window对象的 ...

  9. 批处理文件 bat

    删除D盘的所有文件:del /a /f /q d:\*.* 删除指定目录的指定扩展名的文件:del /a /f /q 目录:\*.jpg 删除当前目录下的指定扩展名的文件(指定扩展名为jpg):del ...

  10. 关闭windows7/8的自动升级到windows10

    办公室的电脑已经有好几台自动升级到windows10了. 由于用着很不习惯都要求改回windows7. 升级了就不支持退回去,只能是全部删除重新安装了,很是麻烦.但是也没有看到哪里有可以关闭自动升级的 ...