Contents
- 1 一、Python数据存储(压缩)
- 2 二,h5py库学习
- 2.1 2.1,h5py库了解
- 2.2 2.2,文件对象(File Objects)
- 2.2.1 python文件类对象(这是2.9版本才有的功能)
- 2.3 2.3,组(Groups)
- 3 四,参考资料
最近在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文件的用法:
代码语言:javascript复制import h5py
f = h5py.File("mytestfile.hdf5", "w") # 在当前目录下会生成一个mytestfile.hdf5文件
文件名可以是字节字符串或unicode字符串。
python文件类对象(这是2.9版本才有的功能)
File函数的第一个参数除了是文件名字符串,也可以是Python中的类文件对象,比如io.BytesIo和tempfile.TemporaryFile实例,这是创建HDF5文件的快捷方式,比如我们在测试和网络中发送消息就可以这样使用。
当使用内存中的数据对象时,比如io.BytesIO,数据的写入也会相应占用内存的。如果要编写大量数据,更好的选择可能是使用tempfile中的函数将临时数据存储在磁盘上。代码实例如下:
代码语言:javascript复制"""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根组具有双重功能,并作为文件的入口点:
四,参考资料
- https://blog.csdn.net/csdn15698845876/article/details/73278120
- https://blog.csdn.net/qq_23968185/article/details/77671726
- http://jeff-leaf.site/2017/09/29/Python处理HDF5文件/