python解析.he4文件

36 篇文章 23 订阅
27 篇文章 18 订阅

问题来源:用传统的方法获取.he4文件内容,往往有些信息获取不到。

HDF 是用于存储和分发科学数据的一种自我描述、多对象文件格式。HDF 是由美国国家超级计算应用中心(NCSA)创建的,以满足不同群体的科学家在不同工程项目领域之需要。HDF 可以表示出科学数据存储和分布的许多必要条件。HDF 被设计为:

 

  • 自述性:对于一个HDF 文件里的每一个数据对象,有关于该数据的综合信息(元数据)。在没有任何外部信息的情况下,HDF 允许应用程序解释HDF文件的结构和内容。
  • 通用性:许多数据类型都可以被嵌入在一个HDF文件里。例如,通过使用合适的HDF 数据结构,符号、数字和图形数据可以同时存储在一个HDF 文件里。
  • 灵活性:HDF允许用户把相关的数据对象组合在一起,放到一个分层结构中,向数据对象添加描述和标签。它还允许用户把科学数据放到多个HDF 文件里。
  • 扩展性:HDF极易容纳将来新增加的数据模式,容易与其他标准格式兼容。
  • 跨平台性:HDF 是一个与平台无关的文件格式。HDF 文件无需任何转换就可以在不同平台上使用。

废话说完了,进入今日重点:

# -*- coding:utf-8 -*-
# author:
from pyhdf.HDF import *
from pyhdf.V   import *
from pyhdf.VS  import *
from pyhdf.SD  import *
import numpy as np
import sys
def describevg(group,refnum):
    refs_dict = {}
    vg = v.attach(refnum)
    print("----------------")
    print("name:", vg._name, "class:", vg._class, "tag,ref:",)
    print(vg._tag, vg._refnum)

    # Show the number of members of each main object type.
    print("members: ", vg._nmembers,)
    print("datasets:", vg.nrefs(HC.DFTAG_NDG),)
    print("vdatas:  ", vg.nrefs(HC.DFTAG_VH),)
    print("vgroups: ", vg.nrefs(HC.DFTAG_VG))

    members = vg.tagrefs()
    if "Data Fields"==vg._name:
        index = -1
        for tag, ref in members:
            index += 1
            if tag == HC.DFTAG_VH:  # vdatas
                vd = vs.attach(ref)
                nrecs, intmode, fields, size, name = vd.inquire()  #
                vd.detach()
            elif tag == HC.DFTAG_NDG:  # datasets
                sds = sd.select(sd.reftoindex(ref))
                name, rank, dims, type2, nattrs = sds.info()  #
                sds_group=[i.split(":")[-1] for i in list(sds.dimensions().keys())]
                if group==list(set(sds_group))[0]:
                   refs_dict[sds.info()[0]] = ref
                sds.endaccess()
            elif tag == HC.DFTAG_VG:  # vgroups
                vg0 = v.attach(ref)
                vg0.detach()
            else:
                pass
        vg.detach()
    return refs_dict
if __name__ == '__main__':
    Path = r'E:\GraduationDesign\weilesa\OMI-Aura_L1-OML1BIRR_2018m0608t0107-o73916_v003-2018m0608t082245.he4'
    hdf = HDF(Path)
    sd = SD(Path)
    vs = hdf.vstart()
    v = hdf.vgstart()
    #包含组v.findclass('SWATH Vgroup')
    print( "包含组:",v.findclass('SWATH Vgroup'))
    group='Sun Volume VIS Swath'#组
    keys='Irradiance'
    dataset=''
    keys_list=[]
    ref = -1
    while 1:
        try:
            ref = v.getid(ref)
        except:
            break
        refs_dict = describevg(group,ref)
        # print(refs_dict)
        if len(refs_dict.keys()) > 1:
            keys_list.append(refs_dict[keys])
    for keys_li in keys_list:
        sds = sd.select(sd.reftoindex(keys_li))
        data = np.float64(sds.get())



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值