《Python和HDF 5大数据应用》——2.4 你的第一个HDF5文件

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数据模型中的第一个主要对象:数据集。

时间: 2024-09-20 06:06:41

《Python和HDF 5大数据应用》——2.4 你的第一个HDF5文件的相关文章

《Python和HDF 5大数据应用》——1.2 HDF5到底是什么

1.2 HDF5到底是什么 HDF5是一种存储相同类型数值的大数组的机制,适用于可被层次性组织且数据集需要被元数据标记的数据模型. 它跟SQL风格的关系型数据库区别相当大,HDF5在组织结构方面有一些特殊的技巧(第8章中有一个例子).如果你需要在多个表上保持关系,或者想要在数据上进行JOIN,那么一个关系型数据库可能更适合你.又或者你需要在一台没有安装HDF5的机器上读取一个小型的1维数据集,那么CSV这样的文本格式是更合理的选择. 但如果你需要处理多维数组,对性能有非常高的要求,需要在数据集上

《Python和HDF 5大数据应用》——2.2 设置

2.2 设置 背景就介绍到这里.现在让我们开始使用Python!不过,用哪个Python? 2.2.1 Python2还是Python3 Python社区正在经历一场大变.多年以来Python已经积攒了一大堆功能和错误,比如不遵守命名规范的模块或者字符串处理上的缺陷等.为了解决这些问题,人们决定启动Python 3,从Python 2过去的错误中释放出一个全新的Python主版本. Python 2.7将是最后一个2.X的发行版.虽然为了修理bug,对它的更新还会继续持续一段时间,但是新的Pyt

《Python和HDF 5大数据应用》——第1章 简介 1.1 Python和HDF5

第1章 简介 我刚毕业那会遇到过一个严重的问题--一部国家公认的等离子体研究设备花了整整一周时间收集的上千万个数据的值不太对劲. 比正常情况小了约40个数量级. 我跟我的咨询师挤在他的办公室,在一台崭新的G5 Mac Pro上运行我们的可视化软件,试图搞明白哪里出了问题.从机器中获得的数据是正确的,实验所使用的数字转换器提交的原始数据看上去没有问题.我在Thinkpad笔记本上用IDL语言编写了一个巨大的脚本将原始数据转换成可视化软件能够识别的文件.这些文件的格式十分简单:一个简短的定长头部后面

《Python和HDF 5大数据应用》——第2章 开始使用 2.1 HDF基本原理

第2章 开始使用 2.1 HDF基本原理 在迫不及待跳进Python代码样例之前,我们有必要花几分钟时间着重关注一下HDF5自身是如何组织的.图2-1展示了HDF5的各种逻辑层.蓝色表示该层处于HDF5标准库内部:绿色则代表使用HDF5的客户软件. 大多数客户代码,包括Python模块h5py和PyTables都使用C API(HDF5自己就是用C写成的).在简介里我们已经知道HDF5的数据模型包含三大公开抽象:数据集(第3章).组(第5章)和特征(第6章).C API(以及其上的Python代

谷歌开源 Python Fire;一张图读懂 Python、R 的大数据应用等 | AI 开发者头条

▲ 内容预览: 谷歌开源 Python Fire NASA 发布 2017-2018 软件目录,供开发者免费使用 一张图看懂大数据中 R 语言的应用 一张图看懂大数据中 Python 的应用 每日推荐阅读 谷歌搜索技术分析,如何一步步实现"不止于关键词"? █ 谷歌开源 Python Fire 昨晚谷歌公布了新的 Python 工具包--Python Fire.它的功能很简单:能从任何 Python 代码生成命令行接口(CLI).开发者面对任意一个 Python 程序,仅需调用 Pyt

详解Python实现服务器之间大数据P2P文件传输效率实例

应用场景介绍 服务器越来越多,需要大规模的部署同一个文件,例如因为方便使用systemtap这个工具定位问题,需要把手上几百台服务器同时安装kernel-debuginfo这个包,原有的方式采用一个源服务器,采用rsync或者scp之类的文件传输方式只能做到一个点往下分发这个文件,这个时候下发的速度就会比较的慢,基于以上原因,我写了一个基于bt协议传输文件的小工具,实际测试,传输到10个机房,70多台机器传输一个240M的这个内核文件,到所有的机器,源采用限速2m/s的上传速度,测试的结果大概只

大数据小说 | 如何用一小时看透一个初识的姑娘

"科学算命" "同学,你的背包拉链没拉好.这个社会越来越险恶,像你这么可爱的女孩子一定要当心." 小姑娘左手端着一杯焦糖玛奇朵,右手拿着iPhone,闻言瞟了我一眼,顺手摸了摸背包,露出了T恤背后的艾薇儿.当她的手指触到贴着射手座符号的MacBook Air时,我趁机向她抛出一个善意而知性的微笑:"有兴趣看看最近的运势吗?" 她顺着我的手势望去,只见"科学算命"四个挺拔刚遒的大字映入眼帘,眉毛刷地一下挑起,眼神顿时亮了三个流明

韩亦舜:谁能熟练运用大数据思维,就有机会成为下一个马云

在大数据时代,没有人能游离于大数据之外.为更好的融入这个时代,我们能做的就是学会并熟练的掌握和运用一种全新的思维方式--大数据思维.大数据可以是名词.是动词.是形容词--正如许多流行语一样,"大数据"是一个含糊不明确的词语,经常被人们信手拈来又随手抛去.从2012年至今,经过铺垫.酝酿.炒作.质疑,"大数据"渐渐走下神坛,轮廓更加清晰.界限更加明确. 近日,中国大数据产业观察网记者在清华园内专访了清华大学数据科学研究院执行副院长韩亦舜,探究大数据的"真实身

为什么选择这样的大数据平台架构?

当前BAT基本公开了其大数据平台架构,从网上也能查询到一些资料,关于大数据平台的各类技术介绍也不少,但在那个机制.那个环境.那个人才.那个薪酬体系下,对于传统企业,可借鉴的东西也是有限的. 技术最终为业务服务,没必要一定要追求先进性,各个企业应根据自己的实际情况去选择自己的技术路径. 与传统的更多从技术的角度来看待大数据平台架构的方式不同,笔者这次,更多的从业务的视角来谈谈关于大数据架构的理解,即更多的会问为什么要采用这个架构,到底能给业务带来多大价值,实践的最终结果是什么. 它不一定具有通用性