本节书摘来自异步社区《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 5大数据应用》——2.4 你的第一个HDF5文件相关推荐

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

    本节书摘来自异步社区<Python和HDF 5大数据应用>一书中的第2章,第2.4节,作者[美]Andrew Collette(科莱特),胡世杰 译,更多章节内容可以访问云栖社区" ...

  2. 云计算和python学哪个_大数据、云计算该如何学习?

    大数据之Linux+大数据开发篇 阶段一.大数据.云计算 - Hadoop大数据开发技术 课程一.大数据运维之Linux基础 本部分是基础课程,帮大家进入大数据领域打好Linux基础,以便更好地学习H ...

  3. 【爬虫+数据可视化毕业设计:英雄联盟数据爬取及可视化分析,python爬虫可视化/数据分析/大数据/大数据屏/数据挖掘/数据爬取,程序开发-哔哩哔哩】

    [爬虫+数据可视化毕业设计:英雄联盟数据爬取及可视化分析,python爬虫可视化/数据分析/大数据/大数据屏/数据挖掘/数据爬取,程序开发-哔哩哔哩] https://b23.tv/TIoy6hj

  4. 视频教程-完整的Python和SAS数据分析-大数据

    完整的Python和SAS数据分析 北美运筹学硕士,统计学博士 就职于北美各大银行,信用局,交通和零售企业和咨询公司 李盛刚 ¥168.00 立即订阅 扫码下载「CSDN程序员学院APP」,1000+ ...

  5. python的人工智能和大数据学习

    python的人工智能和大数据学习 第一步,认识原理 在开始学习前,先搞清楚人工智能应用.机器学习.大数据之间的关联.通常,利用AI技术帮助我们完成各类任务的工具和方式,我们称之为"人工智能 ...

  6. 【【数据可视化毕业设计:差旅数据可视化分析,python爬虫可视化/数据分析/大数据/大数据屏/数据挖掘/数据爬取,程序开发-哔哩哔哩】-哔哩哔哩】 https://b23.tv/iTt30QG

    [[数据可视化毕业设计:差旅数据可视化分析,python爬虫可视化/数据分析/大数据/大数据屏/数据挖掘/数据爬取,程序开发-哔哩哔哩]-哔哩哔哩] https://b23.tv/iTt30QG ht ...

  7. Python微博地点签到大数据实战(二)POI与坐标

    原文:http://m.blog.csdn.net/article/details?id=49018193 什么是POI? 无奈网上关于POI的解释大多是"只是白露级驱逐舰'夕立'的一个口癖 ...

  8. python零基础入门大数据_【资源分享】零基础入门大数据(数据分析)经验分享...

    声明: 开头还是要先申明一下的,博主纯粹是爱好,在业余时间学习相关的知识.希望能给博主一样情况的入门同学提供一个比较短的学习路径,提高学习效率.博主看过很多个学习的视频和数据,发现很多内容都是重复的, ...

  9. python有什么作用-大数据学习之python语言有什么作用?

    很多人选择学习大数据的时候,首先是要选择合适的开发语言入门,尤其是数据分析这个岗位,很多人选择python语言入门,本文由科多大数据的老师整理,细数python语言的应用领域,辅助各位认识了解pyth ...

最新文章

  1. 使用VMware Workstation搭建基于Linux的Oracle 10g RAC
  2. ['1', '2', '3'].map(parseInt) what why ?
  3. js变量前有 var 与没有的区别
  4. 如何判断服务器之间的服务是否可用?ping 还是 telnet?
  5. 一文弄懂用户画像以及如何召回用户
  6. Nginx使用openssl生成证书文件
  7. JMP指令转换公式推导
  8. 创业周年记:召唤神龙一周年小记
  9. 下行物理信道rs_这些CH结尾的LTE物理信道傻傻分不清楚?快来看这篇文章!
  10. ES6--Decorator修饰器
  11. 奔图 Pantum P2206NW 打印机驱动
  12. 【历史上的今天】1 月 1 日:惠普诞生;互联网的规范化;百度成立
  13. [面试问答] 面试常问的40个问题 附带经典答案!
  14. html5好看的颜色代码,css好看的颜色配色.html
  15. 【报告分享】2020年K12在线教育行业广告策略用户调研报告(附下载)
  16. python查看微信撤回消息怎么弄_微信撤回消息怎么查?Python3步啥都知道了!
  17. 大数据分析02——成都二手房(热度)
  18. 小布老师讲座笔记(一)
  19. 微信JSAPI支付对接流程及支付接口设计
  20. Zephyr与Linux线程切换

热门文章

  1. Boost:gzifstream和gzofstream的测试程序
  2. VTK:几何对象之Cone
  3. OpenCV高级形态转换的实例(附完整代码)
  4. OpenCV反向项目功能用法的实例(附完整代码)
  5. OpenCV蒙版图像make mask image的实例(附完整代码)
  6. OpenCV使用MultiTracker
  7. Qt for VxWorks
  8. QT的QVBoxLayout类的使用
  9. 旅行商问题动态规划matlab,旅行商问题的解法
  10. centos下svn安装,svn用户管理,svn用户目录管理(虚拟机下访问)