hd5文件的相关操作以及在python中的读写

一、介绍

  • Hierarchical Data Format Version 5, HDF5: 层次性数据格式第五版

    • 是一种存储相同类型数值的大数组的机制,适用于可被层次性组织且数据集需要被元数据标记的数据模型
    • 常用的接口模块为 h5py
  • HDF5 三大要素:

    • hdf5 files: 能够存储两类数据对象 dataset 和 group 的容器,其操作类似 python 标准的文件操作;File 实例对象本身就是一个组,以 / 为名,是遍历文件的入口
    • dataset(array-like): 可类比为 Numpy 数组,每个数据集都有一个名字(name)、形状(shape) 和类型(dtype),支持切片操作
    • group(folder-like): 可以类比为 字典,它是一种像文件夹一样的容器;group 中可以存放 dataset 或者其他的 group,键就是组成员的名称,值就是组成员对象本身(组或者数据集)

二、打开工具

直接用记事本打开hdf5文件的话,是一团乱码。HDFView是用来查看hdf5文件的软件,可以免费使用,好多人都有闪退的情况,这是因为没有添加环境变量。

HDF5 数据可视化工具 HDFView:

  • 支持全平台,可查看数据的细节
  • 注意: 打开路径中不要包含中文
  • 下载链接:HDFView官方网站下载
  • 选择自己需要的版本,点击Download
  •  选择自己需要的版本,Win10系统64位选择下面这个版本,点击Download
  • 下载好压缩包后,解压,打开文件夹,点击exe文件开始安装
  • 然后一路next,选择安装路径,等待安装结束。
  • 添加环境变量:不添加环境变量就会闪退,所以这一步是必要的。
  • 找到bin的本地路径并添加进path变量
  • 然后一路确定即可

 三、查看HDF文件

1.点击exe可执行文件打开软件。

 

2.点击file->open打开HDF文件

3.然后就可以查看数据了。

四、Python中打开

# -*- coding: utf-8 -*-

import h5py
import numpy as np

#HDF5的写入:
imgData = np.zeros((2,4))
f = h5py.File('HDF5_FILE.h5','w')   #创建一个h5文件,文件指针是f
f['data'] = imgData                 #将数据写入文件的主键data下面
f['labels'] = np.array([1,2,3,4,5])            #将数据写入文件的主键labels下面
f.close()                           #关闭文件

#HDF5的读取:
f = h5py.File('I://AMSR//AMSR_U2_L3_SeaIce12km_B04_20171230.he5','r')   #打开h5文件
# 可以查看所有的主键
motion = f['motion']
x = motion
print(x)
print()
for key in f.keys():
    print(f[key])

 

 

 

  

        

  • 3
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
以下是一个基于Java的Android程序,可以在当前目录下查找所有相同文件: ```java import java.io.File; import java.io.FileInputStream; import java.security.MessageDigest; import java.util.ArrayList; import java.util.HashMap; import java.util.Map; public class FindSameFile { public static void main(String[] args) throws Exception { // 获取当前目录 String currentPath = System.getProperty("user.dir"); // 获取所有文件 File[] files = new File(currentPath).listFiles(); // 计算所有文件的 MD5 值 Map<String, ArrayList<String>> fileMap = new HashMap<>(); for (File file : files) { if (file.isFile()) { String md5 = getFileMD5(file); if (!fileMap.containsKey(md5)) { fileMap.put(md5, new ArrayList<>()); } fileMap.get(md5).add(file.getAbsolutePath()); } } // 输出相同的文件列表 for (ArrayList<String> fileList : fileMap.values()) { if (fileList.size() > 1) { System.out.println("相同的文件:"); for (String filePath : fileList) { System.out.println(filePath); } System.out.println(); } } } public static String getFileMD5(File file) throws Exception { MessageDigest md5 = MessageDigest.getInstance("MD5"); FileInputStream fis = new FileInputStream(file); byte[] buffer = new byte[1024]; int length; while ((length = fis.read(buffer)) != -1) { md5.update(buffer, 0, length); } fis.close(); byte[] md5Bytes = md5.digest(); StringBuilder sb = new StringBuilder(); for (byte md5Byte : md5Bytes) { String hexString = Integer.toHexString(0xFF & md5Byte); if (hexString.length() == 1) { sb.append("0"); } sb.append(hexString); } return sb.toString(); } } ``` 你需要把这个程序放到Android工程里面的一个Java文件,然后在你的Activity里面调用它的main()方法即可。注意,这个程序会递归地查找当前目录下的所有文件,包括子目录文件。如果你只想查找当前目录下的文件,可以在程序加一些判断。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ZGlenfiddich

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值