HDF5 文件格式系统-Python

1、什么是HDF5

     简单的来说HDF5是一种新的文件格式,可以进行大批量文件的存储,并且该种存储格式支持可以通过numpy方便的进行数据的操作-包括切片,keys等操作。

   具体的介绍参考这篇博客HDF5介绍

2、Python 中 HDF5 模块的使用

     贴一个官方文档:HDF5官方文档 ,最好的学习方式还是看官方文档进行学习。(这里的代码对应的Python 2.x版本)

     Python中可以进行hdf5模块的调用,并且进行文件的读写,还是以一个例子为例:

     (1)生成hdf5文件准备工作,需要创建一个文本文档,其中里面包含了你需要的文件地址(这里是用的图片地址),和相应的数据。

     格式如下: 其中每一行分为两部分,第一部分为照片的地址,第二部分的 0 表示其标签(你也可以根据需要增加或者减少列的数目)

     注意:一定要在对应的路径下存有相应的图片。

/media/hadoop/5610E34010E32629/WYK_CARS/wyk_test_data/img_wyk/00001.jpg 0
/media/hadoop/5610E34010E32629/WYK_CARS/wyk_test_data/img_wyk/00002.jpg 0
/media/hadoop/5610E34010E32629/WYK_CARS/wyk_test_data/img_wyk/00003.jpg 0
/media/hadoop/5610E34010E32629/WYK_CARS/wyk_test_data/img_wyk/00004.jpg 0
/media/hadoop/5610E34010E32629/WYK_CARS/wyk_test_data/img_wyk/00005.jpg 0
/media/hadoop/5610E34010E32629/WYK_CARS/wyk_test_data/img_wyk/00006.jpg 0
/media/hadoop/5610E34010E32629/WYK_CARS/wyk_test_data/img_wyk/00007.jpg 0
/media/hadoop/5610E34010E32629/WYK_CARS/wyk_test_data/img_wyk/00008.jpg 0
/media/hadoop/5610E34010E32629/WYK_CARS/wyk_test_data/img_wyk/00009.jpg 0
/media/hadoop/5610E34010E32629/WYK_CARS/wyk_test_data/img_wyk/00010.jpg 0

(2)hdf5文件生成

     使用的tflearn.data_utils的方法,也可以按照官方文档的方式进行creat

from tflearn.data_utils import build_hdf5_image_dataset
import h5py

new_train = "/media/hadoop/5610E34010E32629/WYK_CARS/wyk_test_data/mini_data.txt"

build_hdf5_image_dataset(new_train, image_shape=(224, 224), mode='file', output_path='new_train.h5', categorical_labels=True, normalize=False)

print ('Done creating new_train.h5')

(3)hdf5文件的使用

    hdf5文件的打开及使用:

   需要注意的一点是查看hdf5文件的key不能按照官方文档的要求,因为输入data.keys(),会输出KeysView(<HDF5 file "new_val_224.h5" (mode r)>),而不是一个list 了。

When using h5py from Python 3, the keys(), values() and items() methods will return 
view-like objects instead of lists. These objects support containership testing and
iteration, but can’t be sliced like lists.

   所以我们需要改变下对key的直接读取方式:

data=h5py.File('new_val_224.h5', 'r')
for key in data.keys():
    print(data[key].name)
#输出 /X /Y 两个key,所以就可以进行调用并进行numpy的操作了

    END

猜你喜欢

转载自blog.csdn.net/herr_kun/article/details/83340760
今日推荐