真锋
永远保持一颗学习和专注的心
嵌入式视觉

【Kaggle竞赛】h5py库学习

最近在github上学习别人开源的一些Kaggle竞赛的源码,发现很多用到h5py和shutil这两个库,所以决定深入学习下这两个库的操作。

一、Python数据存储(压缩)

(1)numpy.save , numpy.savez , scipy.io.savemat

numpy和scipy内建的数据存储方式。

(2)cPickle + gzip

cPickle是pickle内建的数据存储方式,gzip是常用的文件压缩模块。

(3)h5py

h5py是对HDF5文件格式进行读写的python包,关于h5py更多介绍与安装,参考官方网站

二,h5py库学习

2.1,h5py库了解

h5py这个库是用于HDF5二进制数据格式的python接口,而HDF5是一种针对大量数据进行组织和存储的文件格式,它包含了数据模型,库和文件格式标准。

HDF5可以让我们存储大量的数字数据,并且很容易操纵来自于Numpy库的数据。举个例子来说,就是我们可以对存储在磁盘上的多TB数据进行切片操作,就像操作Numpy数组一样方便。无论是什么样的分类和标记方式,我们都可以把成千上万的数据集也可以存储在一个文件中。

在python中处理HDF5文件依赖于h5py这个库,安装h5py包方法如下:

conda install h5py   # anconda3环境安装
pip install h5py     # Python2安装
pip3 install h5py    # Python3安装

h5py文件是存放两类对象的容器,数据集(dataset)和组(group)。

  • dataset类似数组的数据集合,和numpy的数组差不多。
  • group是类似文件夹一样的容器,可以包含dataset和其他groups好比python中的字典,有键(key)和值(value)。

使用h5py要记住的最基本的事情就是:

Groups就像字典(dictionaries)一样工作,而datasets像Numpy数组(arrays)一样工作!

2.2,文件对象(File Objects)

HDF5文件通常像标准的Python文件对象一样工作。它们支持r/w/等工作模式,并且会在不再使用时关闭。在HDF5文件中没有文本和二进制的概念。下面代码是创建HDF5文件的用法:

import h5py
f = h5py.File("mytestfile.hdf5", "w") # 在当前目录下会生成一个mytestfile.hdf5文件

文件名可以是字节字符串或unicode字符串。

python文件类对象(这是2.9版本才有的功能)

File函数的第一个参数除了是文件名字符串,也可以是Python中的类文件对象,比如io.BytesIo和tempfile.TemporaryFile实例,这是创建HDF5文件的快捷方式,比如我们在测试和网络中发送消息就可以这样使用。

当使用内存中的数据对象时,比如io.BytesIO,数据的写入也会相应占用内存的。如果要编写大量数据,更好的选择可能是使用tempfile中的函数将临时数据存储在磁盘上。代码实例如下:

"""Create an HDF5 file in memory and retrieve the raw bytes

    This could be used, for instance, in a server producing small HDF5
    files on demand.
"""
import io
import h5py

bio = io.BytesIO()    # 创建BytesIO对象
with h5py.File(bio) as f:
    f['dataset'] = range(10)

data = bio.getvalue() # data是一个常规的Python字节对象。
print("Total size:", len(data))
print("First bytes:", data[:10])

2.3,组(Groups)

组是HDF5文件组织的容器机制之一。从Python编程的角度来看,组(Groups)的工作方式有点像字典(dictionaries)。在这种情况下,“keys”是组成员的名称,“values”是成员本身(组Group和数据集Datasets)对象。

File对象作为HDF5根组具有双重功能,并作为文件的入口点:

四,参考资料

赞赏
更多干货文章,欢迎关注我的微信公众号-嵌入式视觉。

发表回复

textsms
account_circle
email

嵌入式视觉

【Kaggle竞赛】h5py库学习
最近在github上学习别人开源的一些Kaggle竞赛的源码,发现很多用到h5py和shutil这两个库,所以决定深入学习下这两个库的操作。 一、Python数据存储(压缩) (1)numpy.save , numpy.sa…
扫描二维码继续阅读
2018-12-07