(一)HDF与h5

  HDF(Hierarchical Data Format层次数据格式)是一种设计用于存储和组织大量数据的文件格式,最开始由美国国家超算中心研发,后来由一个非盈利组织HDF Group支持。HDF支持多种商业及非商业的软件平台,包括MATLAB、Java、Python、R和Julia等等,现在也提供了Spark。其版本包括了HDF4和现在大量用的HDF5。h5是HDF5文件格式的后缀。h5文件对于存储大量数据而言拥有极大的优势,这里安利大家多使用h5文件来存储数据,既高逼格又高效率。

(二)h5文件数据组织方式:像Linux文件系统一样组织数据

   h5文件中有两个核心的概念:组“group”和数据集“dataset”。 一个h5文件就是 “dataset” 和 “group” 二合一的容器。
   dataset :简单来讲类似数组组织形式的数据集合,像 numpy 数组一样工作,一个dataset即一个numpy.ndarray。具体的dataset可以是图像、表格,甚至是pdf文件和excel。
   group:包含了其它 dataset(数组) 和 其它 group ,像字典一样工作。
   一个h5文件被像linux文件系统一样被组织起来:dataset是文件,group是文件夹,它下面可以包含多个文件夹(group)和多个文件(dataset)。
形象来看h5数据组织方式大概像酱婶儿的,诺!跟文件系统一样,大概知道它为啥叫层次数据格式了吧!

(三)使用python对h5文件进行操作

python对h5文件的操作依赖于h5py包
通过举个栗子来介绍h5py包是如何读写h5文件的
读h5文件:

# Reading h5 file import h5py
with h5py.File('cat_dog.h5',"r") as f:for key in f.keys():#print(f[key], key, f[key].name, f[key].value) # 因为这里有group对象它是没有value属性的,故会异常。另外字符串读出来是字节流,需要解码成字符串。print(f[key], key, f[key].name) # f[key] means a dataset or a group object. f[key].value visits dataset' value,except group object.
"""
结果:
<HDF5 group "/dogs" (1 members)> dogs /dogs
<HDF5 dataset "list_classes": shape (2,), type "|S7"> list_classes /list_classes
<HDF5 dataset "train_set_x": shape (209, 64, 64, 3), type "|u1"> train_set_x /train_set_x
<HDF5 dataset "train_set_y": shape (209,), type "<i8"> train_set_y /train_set_y代码解析:
文件对象f它表示h5文件的根目录(root group),前面说了group是按字典的方式工作的,通过f.keys()来找到根目录下的所有dataset和group的key,然后通过key
来访问各个dataset或group对象。结果解析:
1.我们可以发现这个h5文件下有1个叫dogs的文件夹(group)和3个文件(dataset)它们分别叫list_classes,train_set_x,train_set_y它们的shape都可知。
dogs group下有一个成员但我们不知道它是group还是dataset。
2.我们可以发现key和name的区别:
上层group对象是通过key来访问下层dataset或group的而不是通过name来访问的;
因为name属性它是dataset或group的绝对路径并非是真正的"name",key才是真正的"name"。
name绝对路径:比如下文中访问name得到:/dogs/husky,它表示根目录下有dogs这个挂载点,dogs下又挂载了husky。
"""  dogs_group =  f["dogs"]for key in dogs_group.keys():print(dogs_group[key], dogs_group[key].name)
"""
结果:
<HDF5 dataset "husky": shape (64, 64, 3), type "<f8"> /dogs/husky
可见dogs文件夹下有个key为husky的文件dataset
"""
from h5py import Dataset, Group, File
with File('cat_dog.h5','r') as f:for k in f.keys():if isinstance(f[k], Dataset):print(f[k].value)else:print(f[k].name)

写h5文件:

# Writing h5import h5py
import numpy as np
# mode可以是"w",为防止打开一个已存在的h5文件而清除其数据,故使用"a"模式
with h5py.File("animals.h5", 'a') as f:f.create_dataset('animals_included',data=np.array(["dogs".encode(),"cats".encode()])) # 根目录下创建一个总览介绍动物种类的dataset,字符串应当字节化dogs_group = f.create_group("dogs") # 在根目录下创建gruop文件夹:dogsf.create_dataset('cats',data = np.array(np.random.randn(5,64,64,3))) # 根目录下有一个含5张猫图片的dataset文件dogs_group.create_dataset("husky",data=np.random.randn(64,64,3)) # 在dogs文件夹下分别创建两个dataset,一张哈士奇图片和一张柴犬的图片dogs_group.create_dataset("shiba",data=np.random.randn(64,64,3))

我们来检查一下这个animals.h5文件

with h5py.File('animals.h5','r') as f:for fkey in f.keys():print(f[fkey], fkey)print("======= 优雅的分割线 =========")'''结果:<HDF5 dataset "animals_included": shape (2,), type "|S4"> animals_included<HDF5 dataset "cats": shape (5, 64, 64, 3), type "<f8"> cats<HDF5 group "/dogs" (2 members)> dogs'''dogs_group = f["dogs"] # 从上面的结果可以发现根目录/下有个dogs的group,所以我们来研究一下它for dkey in dogs_group.keys():print(dkey, dogs_group[dkey], dogs_group[dkey].name, dogs_group[dkey].value)'''husky <HDF5 dataset "husky": shape (64, 64, 3), type "<f8"> /dogs/husky [[[ 6.22221467e-01  2.29412386e-01  1.70099600e-01][-9.53310941e-01 -1.65325168e+00  6.50092663e-02][-2.33444396e-01  5.32328485e-01 -1.23046495e+00]...[-8.27186186e-04 -9.54570238e-01  1.20224835e+00][-3.03556381e-01  5.30470941e-01 -1.49928878e-01][ 5.24641964e-01 -1.55304472e+00  1.30016600e+00]]...'''

更多骚操作可以参考h5py官方文档。
参考文献:
[1] h5py官方文档
[2] HDF官网

理解h5文件并使用python对h5格式文件进行读写操作相关推荐

  1. python用os.system打开wav文件_使用python读取wav格式文件

    ** 使用python读取wav格式文件 ** - 基本概念 [采样频率] 即取样频率, 指每秒钟取得声音样本的次数.采样频率越高,声音的质量也就越好,声音的还原也就越真实,但同时它占的资源比较多.由 ...

  2. Python——读取raw格式文件

    Python--读取raw格式文件 文章目录 Python--读取raw格式文件 前言 一.直接上代码 前言 简单记录一下python读取raw格式图像,因为reshape来来回回还交换轴搞得人头大, ...

  3. python 读取csv文件转成字符串,python实现csv格式文件转为asc格式文件的方法

    一.背景描述 csv格式文件是一种类似于excel的文件格式 asc格式文件是一种可以用text打开的文本文件 csv转asc本来可以用arcgis顺利完成,但由于csv数据量太大(744万行),ar ...

  4. 在Python中FITS格式文件数据的读取 (转载)

    在Python中FITS格式文件数据的读取 (转载) 前言 \space\space\space\space     FITS(Flexible Image Transport System)格式文件 ...

  5. AI加速信息和知识获取速度,使用Python对MD格式文件和HTML网页进行内容摘要,2023年4月AI网页内容摘要工具大全

    在信息时代,获取知识变得至关重要.然而,有时候信息的数量是如此之大,以至于人类无法有效处理.这就是人工智能(AI)能够做出贡献的地方.通过AI,我们可以快速地找到并理解文章的核心观点和重要信息.下面将 ...

  6. Python:pmml格式文件的简介、安装、使用方法(利用python将机器学习模型转为Java常用的pmml格式文件)之详细攻略

    Python:pmml格式文件的简介.安装.使用方法(利用python将机器学习模型转为Java常用的pmml格式文件)之详细攻略 目录 pmml格式文件的简介 1.PMML结构 pmml安装 pmm ...

  7. python获取的html转换为json,python读取XML格式文件并转为json格式

    XML文件如下: 红楼梦书名> 曹雪芹作者> 描述贾宝玉和林黛玉的爱情故事主要内容> 人民文学出版社出版社> 图书> 一.python读取XML格式文件代码: impor ...

  8. csv加header python_用python处理csv格式文件

    用python处理csv格式文件 在各种平台上获取数据时,我们常常获得的是csv格式的文件.csv格式是一种逗号分隔值的文件格式,它并不是非常reader-friendly.所幸,python标准库中 ...

  9. python读取各种格式文件方式

    python读取各种格式文件方式 1.读取图片并显示 #方法1 from PIL import Image img=Image.open('1.jpg') img.show() #方法2 import ...

  10. python读取特殊格式文件

    python读取特殊格式文件 1.pytorch读取lmdb格式文件 参考文献 做深度学习/数据分析,数据读取是基础.必需的一环.特整理,以待后用. 1.pytorch读取lmdb格式文件 内容来源于 ...

最新文章

  1. 助力5G行业应用扬帆启航,第二届5G毫米波产业高峰论坛圆满召开
  2. STL (13) 非变动型算法
  3. CSS中一些语法规范和代码风格
  4. JQuery iframe 刷新效果
  5. Python学习---协程 1226
  6. 数据结构——折半查找
  7. [转] fedora linux下安装vmware tools的最好方法
  8. python list 取重复次数
  9. tcp协议的主要功能是什么_前端要知道的网络知识一:TCP/IP 协议到底在讲什么...
  10. HTTP API 设计指南(响应部分)
  11. 2022年C语言教程入门和最新C语言自学教程C语言进阶教程大全
  12. 计算机毕业设计asp.net企业差旅管理系统(源码+系统+mysql数据库+Lw文档)
  13. FCFS,SSTF,SCAN,FIFO,LRO
  14. Pytorch 微调(Fine-tuning)
  15. 设计模式 装饰模式(decorate)
  16. amr文件服务器,如何打开amr文件?amr音频格式用什么打开?
  17. github上关于iOS的各种开源项目集合 (转载)
  18. 安卓手机开机动画bootanimation.zip文件制作以及注意事项
  19. MySQL数据类型以及基本使用详解
  20. 第5章 - 二阶多智能体系统的协同控制 --> 连续时间系统编队控制

热门文章

  1. Programming Ruby 读书笔记(六)
  2. 这次经历给我埋下了学理财的种子
  3. 既然彼此不能相濡以沫, 那就相忘于江湖吧.
  4. 获取docker容器里面的root权限
  5. python下的spectral模块(高光谱图像处理)
  6. yii mysql 查询 类型转换_yii2.0数据库查询修改等方法
  7. 使用certbot生成https证书
  8. 三维激光扫描技术知识检测----选择、判断
  9. matlab 数组横向纵向拼接
  10. MarkdownPad2 插入数学公式Mathjax