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

简介:

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

2.4 你的第一个HDF5文件

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

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


screenshot

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

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


screenshot

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


screenshot

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


screenshot

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


screenshot

提示

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

2.4.1 使用环境管理器

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


screenshot

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

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


screenshot

2.4.2 文件驱动

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

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

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

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


screenshot

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


screenshot

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

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


screenshot

由于历史上的原因,默认的memb_size是231−1。
3.mpio驱动

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

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

2.4.3 用户块

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

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


screenshot

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

相关实践学习
基于MaxCompute的热门话题分析
Apsara Clouder大数据专项技能认证配套课程:基于MaxCompute的热门话题分析
相关文章
|
7月前
|
存储 分布式计算 大数据
基于Python大数据的的电商用户行为分析系统
本系统基于Django、Scrapy与Hadoop技术,构建电商用户行为分析平台。通过爬取与处理海量用户数据,实现行为追踪、偏好分析与个性化推荐,助力企业提升营销精准度与用户体验,推动电商智能化发展。
|
7月前
|
数据可视化 关系型数据库 MySQL
基于python大数据的的海洋气象数据可视化平台
针对海洋气象数据量大、维度多的挑战,设计基于ECharts的可视化平台,结合Python、Django与MySQL,实现数据高效展示与交互分析,提升科研与决策效率。
|
8月前
|
监控 数据可视化 数据挖掘
Python Rich库使用指南:打造更美观的命令行应用
Rich库是Python的终端美化利器,支持彩色文本、智能表格、动态进度条和语法高亮,大幅提升命令行应用的可视化效果与用户体验。
811 0
|
7月前
|
监控 机器人 编译器
如何将python代码打包成exe文件---PyInstaller打包之神
PyInstaller可将Python程序打包为独立可执行文件,无需用户安装Python环境。它自动分析代码依赖,整合解释器、库及资源,支持一键生成exe,方便分发。使用pip安装后,通过简单命令即可完成打包,适合各类项目部署。
1363 68
|
7月前
|
机器学习/深度学习 大数据 关系型数据库
基于python大数据的台风灾害分析及预测系统
针对台风灾害预警滞后、精度不足等问题,本研究基于Python与大数据技术,构建多源数据融合的台风预测系统。利用机器学习提升路径与强度预测准确率,结合Django框架实现动态可视化与实时预警,为防灾决策提供科学支持,显著提高应急响应效率,具有重要社会经济价值。
|
7月前
|
数据可视化 大数据 关系型数据库
基于python大数据技术的医疗数据分析与研究
在数字化时代,医疗数据呈爆炸式增长,涵盖患者信息、检查指标、生活方式等。大数据技术助力疾病预测、资源优化与智慧医疗发展,结合Python、MySQL与B/S架构,推动医疗系统高效实现。

推荐镜像

更多