• python中h5文件制作与读取


    1.h5文件格式

    https://blog.csdn.net/buchidanhuang/article/details/89716252

    HDF(Hierarchical Data Format),设计用于存储和组织大量数据的文件格式。

    h5文件中有两个核心的概念:组“group”和数据集“dataset”。组可以理解为文件夹,数据集理解为文件,文件夹中可以递归地包含文件夹、文件等。

    • dataset :简单来讲类似数组组织形式的数据集合,像 numpy 数组一样工作,一个dataset即一个numpy.ndarray。具体的dataset可以是图像、表格,甚至是pdf文件和excel。
    • group:包含了其它 dataset(数组) 和 其它 group ,像字典一样工作。

     2.读取h5文件

    # Reading h5 file 
    
    import h5py
    with h5py.File('cat_dog.h5',"r") as f:
        for key in f.keys():
             #print(f[key], key, f[key].name, f[key].value) 
          # 因为这里有group对象它是没有value属性的,故会异常。另外字符串读出来是字节流,需要解码成字符串。
    print(f[key], key, f[key].name)
    """
    结果:
    <HDF5 group "/dogs" (1 members)> dogs /dogs
    <HDF5 dataset "list_classes": shape (2,), type "|S7"> list_classes /list_classes
    <HDF5 dataset "train_set_x": shape (209, 64, 64, 3), type "|u1"> train_set_x /train_set_x
    <HDF5 dataset "train_set_y": shape (209,), type "<i8"> train_set_y /train_set_y

    代码解析:

    • 文件对象f它表示h5文件的根目录(root group),
    • group是按字典的方式工作的,通过f.keys()来找到根目录下的所有dataset和group的key,然后通过key来访问各个dataset或group对象。

    结果解析:

    1.我们可以发现这个h5文件下有1个叫dogs的文件夹(group)和3个文件(dataset)它们分别叫list_classes,train_set_x,train_set_y它们的shape都可知。
    dogs group下有一个成员但我们不知道它是group还是dataset。
    2.我们可以发现key和name的区别:

    • key是关键字
    • name绝对路径:比如下文中访问name得到:/dogs/husky,它表示根目录下有dogs这个挂载点,dogs下又挂载了husky。

    在打开的f中继续:

        dogs_group =  f["dogs"]
        for key in dogs_group.keys():
            print(dogs_group[key], dogs_group[key].name)
    结果:
    <HDF5 dataset "husky": shape (64, 64, 3), type "<f8"> /dogs/husky
    可见dogs文件夹下有个key为husky的文件dataset

    打印Group的name和Dataset的value:

    from h5py import Dataset, Group, File
    with File('cat_dog.h5','r') as f:
        for k in f.keys():
            if isinstance(f[k], Dataset):
                print(f[k].value)
            else:
                print(f[k].name)

    3.写h5文件

    # Writing h5
    
    import h5py
    import numpy as np
    # mode可以是"w",为防止打开一个已存在的h5文件而清除其数据,故使用"a"模式
    with h5py.File("animals.h5", 'a') as f:
        f.create_dataset('animals_included',data=np.array(["dogs".encode(),"cats".encode()])) # 根目录下创建一个总览介绍动物种类的dataset,字符串应当字节化
        dogs_group = f.create_group("dogs") # 在根目录下创建gruop文件夹:dogs
        f.create_dataset('cats',data = np.array(np.random.randn(5,64,64,3))) # 根目录下有一个含5张猫图片的dataset文件
        dogs_group.create_dataset("husky",data=np.random.randn(64,64,3)) # 在dogs文件夹下分别创建两个dataset,一张哈士奇图片和一张柴犬的图片
        dogs_group.create_dataset("shiba",data=np.random.randn(64,64,3))

    2.从hd5转换为csv格式

    https://gist.github.com/kokitsuyuzaki/5b6cebcaf37100c8794bdb89c7135fd5

  • 相关阅读:
    20145240 《信息安全系统设计基础》第0周学习总结
    20145240《Java程序设计》课程总结
    20145240 《Java程序设计》第五次实验报告
    20145240 《Java程序设计》第十周学习总结
    20145240 《Java程序设计》第四次实验报告
    20145240 《Java程序设计》第九周学习总结
    20145240 《Java程序设计》第三次实验报告
    20145240 《Java程序设计》第八周学习总结
    20145240《Java程序设计》第七周学习总结
    20145239 《信息安全系统设计基础》第2周学习总结
  • 原文地址:https://www.cnblogs.com/BlueBlueSea/p/14970078.html
Copyright © 2020-2023  润新知