本节书摘来自异步社区《Python和HDF 5大数据应用》一书中的第2章,第2.4节,作者[美]Andrew Collette(科莱特),胡世杰 译,更多章节内容可以访问云栖社区“异步社区”公众号查看。

2.4 你的第一个HDF5文件

在我们研究组和数据集之前,让我们先看一下File对象能做些什么,来作为你进入HDF5世界的起点。

这里有一个最简单的使用HDF5的程序:

File对象是你的起点。它提供方法使你能够在文件内创建新的数据集或组,另外还有一些一目了然的属性如.filename和.mode等。

说到.mode,HDF5文件支持Python对普通文件的读写模式:

还有一个额外的HDF5专有模式用于保护你不会意外覆盖某个已存在的文件:

如果一个同名文件已经存在则该函数会失败,否则会创建一个新文件。如果你需要长期运行一个计算程序而且不希望当脚本第二次运行时覆盖你已有的输出文件,你可以用w-模式打开它:

另外,你可以随意使用Unicode文件名!假设你的操作系统支持UTF-8编码,你只需提供一个普通的Unicode字符串:

提示

你可能在想如果你的程序在打开文件时崩溃会怎样。如果你的程序抛出Python异常,别担心!HDF库会在程序退出时自动帮你关闭所有打开的文件。

2.4.1 使用环境管理器

Python 2.6的最酷特性之一是支持了环境管理器。环境管理器通过with语句使用,它们是一些具有特殊方法的对象,这些特殊方法在进入和离开代码块时被调用。下面这个经典的例子使用了Python内建的file对象:

上面的代码打开的全新的file对象仅在f代码块中有效。当f退出时文件被自动关闭(哪怕抛出了异常!)。

h5py.File对象完全支持这种用法。这可以确保文件总是能被正确地关闭,而不需要把所有的代码包含在try/except块中:

2.4.2 文件驱动

文件驱动处于文件系统和HDF5高级抽象(组、数据集和特征)之间。它们处理HDF5地址空间到磁盘上的字节之间的映射关系。一般情况下你无需担心当前使用了哪个驱动,因为默认的驱动适用于大部分的应用程序。

一旦文件被打开,驱动模块就完全透明了。你只需要跟HDF5库打交道,驱动会帮你处理底层存储。

下面是一些比较有意思的驱动,可以帮助你解决一些不常见的问题。

1.core驱动

core驱动会将你的文件整个保存在内存中。它对于你能够存储的数据量显然是有限制的,带来的好处则是超快速的读写。当你需要以内存级的高速来访问HDF5结构时,这是一个很好的选择。你可以将driver关键字设为“core”来开启这个驱动:

你还可以要求HDF5在磁盘上创建一个“备份存储”文件,当内存中的文件映象被关闭时,其内容会被保存到磁盘上:

另外,backing_store关键字同时也告诉HDF5在打开文件时从磁盘读取已存在的文件。所以只要整个文件都能被放入内存,那么你只需要对磁盘文件读写各一次。像数据集的读写、特征的创建等操作都完全不会占用磁盘I/O。

2.family驱动

有时候你会需要将一个大文件分成多个大小一致的文件,这个功能最初是为了支持那些不能处理2GB以上文件的文件系统。

由于历史上的原因,默认的memb_size是231−1。

3.mpio驱动

这个驱动是并发HDF5的核心。它允许多个同时运行的进程访问同一个文件。你可以同时有成百上千个并发计算的进程,它们在共享访问磁盘上同一个文件时能保证数据的一致性。

使用mpio驱动需要一些技巧。第9章会详细介绍该驱动以及在并发环境下使用HDF5的最佳实践。

2.4.3 用户块

HDF5一个有意思的特性是文件内容可以被任意用户数据占用。当一个文件被打开时,HDF5库会在文件最开头搜索HDF5头部,然后是前512字节,前1024字节这样以2的指数递增。这种处于文件开头的数据被称为用户块,你可以在用户块里放任何你需要的数据。

唯一的限制是块的大小(必须是2的指数且最小512),而且当你往用户块内写入数据时,记得要先在HDF5中关闭该文件,示例如下:

接下来我们将要看到的是NumPy用户非常熟悉的数组类型,同时也是HDF5数据模型中的第一个主要对象:数据集。

python读取hdf-eos5数据_《Python和HDF 5大数据应用》——2.4 你的第一个HDF5文件-阿里云开发者社区...相关推荐

  1. c#如何wmf图片转换成png图片_【C#】使用fo-dicom完成BMP,JPG,PNG图片转换为DICOM文件-阿里云开发者社区...

    最近研究了一下DICOM和BMP文件转换的问题,也是很头大.度娘了很久,也在CSDN等论坛看到一些断断续续的文件,最主要的是代码只是片断,不是完整的实现.头大了. 首先,了解一下BMP文件格式,BMP ...

  2. dms mysql定义变量_数据管理DMS:自建MySQL数据库 全量SQL诊断功能发布啦!-阿里云开发者社区...

    MySQL的用户都面临都一个难题,异常或者故障问题难定位,很多时候都靠"猜". 如果比较幸运,异常正在发生,我们还可以获取到会话.引擎状态等信息: 如果没有异常现场,要找到根因,除 ...

  3. sftp shell 批量上传文件_如何在shell脚本里使用sftp批量传送文件-阿里云开发者社区...

    主要步骤如下: 1.为运行shell脚本的本地用户生成密钥对 2.将其中的公钥分发到sftp欲登录的远程服务器上 3.编写并以上面的本地用户运行shell脚本 一.生成密钥对 在shell脚本中使用s ...

  4. hive 元数据 自定义_如何在Hive中创建自定义函数UDF及如何直接通过Impala的同步元数据重用UDF的jar文件-阿里云开发者社区...

    如何在Hive中创建自定义函数UDF及使用 如何在Impala中使用Hive的自定义函数 UDF函数开发 使用Intellij工具开发Hive的UDF函数,进行编译: 1.使用Intellij工具通过 ...

  5. db h2 数据类型_H2数据库函数及数据类型概述-阿里云开发者社区

    H2数据库函数及数据类型概述 jieforest 2015-01-29 573浏览量 简介: H2数据库函数及数据类型概述 一.H2数据库常用数据类型 INT类型:对应java.lang.Intege ...

  6. mysql double 存储_关于MYSQL中FLOAT和DOUBLE类型的存储-阿里云开发者社区

    关于MYSQL中FLOAT和DOUBLE类型的存储 重庆八怪 2016-04-12 844浏览量 简介: 关于MYSQL中FLOAT和DOUBLE类型的存储 其实在单精度和双精度浮点类型存储中其存储方 ...

  7. ecs加解密_阿里云发布ECS磁盘加密,一键加密,业务0改动-阿里云开发者社区

    当下,数据安全问题层出不穷,数据安全已经成为企业用户的生命线.为了保障用户数据安全,阿里云ECS云服务器正式向全网客户发布了"ECS磁盘加密"功能. 阿里云 ECS 磁盘加密功能可 ...

  8. python的requests模块功能_《Python数据可视化编程实战》—— 1.7 安装requests模块-阿里云开发者社区...

    本节书摘来异步社区<Python数据可视化编程实战>一书中的第1章,第1.7节,作者:[爱尔兰]Igor Milovanović,更多章节内容可以访问云栖社区"异步社区" ...

  9. python数据科学实践指南_《Python数据科学实践指南》——导读-阿里云开发者社区...

    前 言 为什么要写这本书 我接触大数据技术的时间算是比较早的,四五年前当大数据这个词火遍互联网的时候,我就已经在实验室里学习编程及算法的知识.那个时候我一心想要做学术,每天阅读大量的英文文献,主要兴趣 ...

最新文章

  1. Linux上PHP加入环境变量
  2. 基于激光点云语义信息的闭环检测
  3. Linux 下挂载新硬盘方法
  4. Oracle常见用法总结
  5. 关于机器学习,这里有一份权威入门指南
  6. (三)Qt语言国际化
  7. mysql+存储过程+模式,Mysql(7)---存储过程
  8. 钉钉自带浏览器版本过低,导致Object.assign不兼容...
  9. hadoop上传文件报错
  10. string字符串转xml_Java将字符串转换为XML文档和将XML文档转换为String
  11. Linux虚拟机中配置多节点MPI实现并行计算完整版
  12. android settings的八个问题
  13. DevCpp 如何进行调试
  14. 打开outlook显示服务器内存不足,Outlook2013无法打开邮箱,报错提示可用内存不足...
  15. leetcode-第13题 罗马数字转整数
  16. 慕课网-安卓攻城狮视频学习及练习(六)
  17. Dubbo (五) ---------监控中心
  18. win2d 渐变颜色
  19. mysql 建表 title create table_mysql中create命令建表sql语句
  20. 第一次去中关村图书大厦

热门文章

  1. java作业问题_写java代码作业时遇到问题,大神不要走,进来看一看吧,求帮助...
  2. 在Hibernate中Query的uniqueResult查询。
  3. 什么是Jackson?(常用Jackson属性解析)
  4. 浅谈PHP代码执行中出现过滤限制的绕过执行方法
  5. 数码相框 在LCD上显示多行文字(6)
  6. HarmonyOS从入门到大神资料下载合集
  7. Throwable源码异常分析
  8. Scala 传名参数、注解
  9. 12388举报时显示服务器异常,【权威发布】即日起,12388电话举报受理系统为民服务...
  10. Canvas-Study