• python开源库——h5py快速入门指南


    python开源库——h5py快速指南

    HDF5 数据文件简介

    HDF5 文件及 h5py

    HDF5 简介

    HDF(Hierarchical Data Format)指一种为存储和处理大容量科学数据设计的文件格式及相应库文件。HDF 最早由美国国家超级计算应用中心 NCSA 开发,目前在非盈利组织 HDF 小组维护下继续发展。当前流行的版本是 HDF5。HDF5 拥有一系列的优异特性,使其特别适合进行大量科学数据的存储和操作,如它支持非常多的数据类型,灵活,通用,跨平台,可扩展,高效的 I/O 性能,支持几乎无限量(高达 EB)的单文件存储等,详见其官方介绍:https://support.hdfgroup.org/HDF5/

    Python 中有一系列的工具可以操作和使用 HDF5 数据,其中最常用的是 h5pyPyTables。我们只介绍 h5py。

    h5py

    一个 HDF5 文件是存储两类对象的容器,这两类对象分别为:

    • dataset:类似数组的数据集合;
    • gropp;类似目录的容器,其中可以包含一个或多个 dataset 及其它的 group。

    一个 HDF5 文件从一个命名为 "/" 的 group 开始,所有的 dataset 和其它 group 都包含在此 group 下,当操作 HDF5 文件时,如果没有显式指定 group 的 dataset 都是默认指 "/" 下的 dataset,另外类似相对文件路径的 group 名字都是相对于 "/" 的。

    HDF5 文件的 dataset 和 group 都可以拥有描述性的元数据,称作 attribute。

    用 h5py 操作 HDF5 文件,我们可以像使用目录一样使用 group,像使用 numpy 数组一样使用 dataset,像使用字典一样使用属性,非常方便和易用。

    #!/usr/bin/python
    # -*- coding: UTF-8 -*-
    #
    # Created by WW on Jan. 26, 2020
    # All rights reserved.
    #
    
    import h5py
    import numpy as np
    
    def main():
    	#===========================================================================
    	# Create a HDF5 file.
    	f = h5py.File("D:/desktop/h5py_example.hdf5", "w")    # mode = {'w', 'r', 'a'}
    
    	# Create two groups under root '/'.
    	g1 = f.create_group("bar1")
    	g2 = f.create_group("bar2")
    
    	# Create a dataset under root '/'.
    	d = f.create_dataset("dset", data=np.arange(16).reshape([4, 4]))
    
    	# Add two attributes to dataset 'dset'
    	d.attrs["myAttr1"] = [100, 200]
    	d.attrs["myAttr2"] = "Hello, world!"
    
    	# Create a group and a dataset under group "bar1".
    	c1 = g1.create_group("car1")
    	d1 = g1.create_dataset("dset1", data=np.arange(10))
    
    	# Create a group and a dataset under group "bar2".
    	c2 = g2.create_group("car2")
    	d2 = g2.create_dataset("dset2", data=np.arange(10))
    
    	# Save and exit the file.
    	f.close()
    
    	''' h5py_example.hdf5 file structure
    	+-- '/'
    	|   +--	group "bar1"
    	|   |   +-- group "car1"
    	|   |   |   +-- None
    	|   |   |   
    	|   |   +-- dataset "dset1"
    	|   |
    	|   +-- group "bar2"
    	|   |   +-- group "car2"
    	|   |   |   +-- None
    	|   |   |
    	|   |   +-- dataset "dset2"
    	|   |   
    	|   +-- dataset "dset"
    	|   |   +-- attribute "myAttr1"
    	|   |   +-- attribute "myAttr2"
    	|   |   
    	|   
    	'''
    
    	#===========================================================================
    	# Read HDF5 file.
    	f = h5py.File("h5py_example.hdf5", "r")    # mode = {'w', 'r', 'a'}
    
    	# Print the keys of groups and datasets under '/'.
    	print(f.filename, ":")
    	print([key for key in f.keys()], "
    ")
    
    	#===================================================
    	# Read dataset 'dset' under '/'.
    	d = f["dset"]
    
    	# Print the data of 'dset'.
    	print(d.name, ":")
    	print(d[:])
    
    	# Print the attributes of dataset 'dset'.
    	for key in d.attrs.keys():
    		print(key, ":", d.attrs[key])
    
    	print()
    
    	#===================================================
    	# Read group 'bar1'.
    	g = f["bar1"]
    
    	# Print the keys of groups and datasets under group 'bar1'.
    	print([key for key in g.keys()])
    
    	# Three methods to print the data of 'dset1'.
    	print(f["/bar1/dset1"][:])		# 1. absolute path
    
    	print(f["bar1"]["dset1"][:])	# 2. relative path: file[][]
    
    	print(g['dset1'][:])		# 3. relative path: group[]
    
    
    
    	# Delete a database.
    	# Notice: the mode should be 'a' when you read a file.
    	'''
    	del g["dset1"]
    	'''
    
    	# Save and exit the file
    	f.close()
    

      

    快去成为你想要的样子!
  • 相关阅读:
    windows 7 wifi热点配置
    Java中的try catch finaly先后调用顺序
    redis php扩展
    mysql索引
    cmd操作数据库的常用命令
    php ajax解决跨越问题
    git常用命令
    php,redis分布式锁防并发
    php商城下单,可以购买多件商品,redis防高并发
    php商城秒杀,redis防高并发
  • 原文地址:https://www.cnblogs.com/jiangkejie/p/14498286.html
Copyright © 2020-2023  润新知