IDL读写hdf5数据

转载于:http://rssthome.com/forum.php?mod=viewthread&tid=50&extra=page=1

pro hdf5
    filter=['*.HDF','*.*']
    files=DIALOG_PICKFILE(/MULTIPLE_FILES,FILTER=filter,title='打开hdf5数据',GET_PATH=path)
    CD,path
    if (files[0] EQ '') then return
    storage_path=dialog_pickfile(/directory,title='选择存储路径')
    n=n_elements(files)

    for i=0,n-1 do begin
    ;-----------------------------读取hdf5--------------------------------
    basename=file_basename(files[i],'.HDF')
    ;H5F_OPEN打开hdf5
    file_id = H5F_OPEN(files[i])
    ;H5G_OPEN打开group
    group_id=H5G_OPEN(file_id,'Data')
    ;H5D_OPEN打开数据集
    dataset_id=H5D_OPEN(group_id,"EV_1KM_RefSB")
    ;H5D_READ读取数据集数据,存入SdsData中
    SdsData=H5D_READ(dataset_id)
    weishu=size(SdsData,/dimensions)
    ;读取属性数据
    Attribute_num= H5A_GET_NUM_ATTRS(dataset_id)
    for j=0,Attribute_num-1 do begin
        ;H5A_OPEN_IDX按照属性索引打开属性
        Attribute_id= H5A_OPEN_IDX(dataset_id,j)
        ;H5A_OPEN_Name按照属性名字打开属性
        ;Attribute_id= H5A_OPEN_Name(dataset_id,'units')
        ;得到属性的名字
        Attribute_name= H5A_GET_NAME(Attribute_id)
        ;读取属性
        AttData=H5A_READ(Attribute_id)
    endfor

    ;-----------------------------输出hdf5--------------------------------
    outname=storage_path+basename+'_out2.HDF'
    ;创建hdf5文件
    outfid=H5F_CREATE(outname)
    ;创建group
    OutGroupId = H5G_CREATE(outfid,"FrameSampleMeasurements")     
    ;创建数据集
     datatype_id = H5T_IDL_CREATE(SdsData)
    dataspace_id = H5S_CREATE_SIMPLE(weishu)
    Outdataset_id = H5D_CREATE(OutGroupId,"sample_measurements_o2",datatype_id,dataspace_id)
    OutData=SdsData
    H5D_WRITE,Outdataset_id,OutData
    ;写数据集的属性
    Attribute_num=H5A_GET_NUM_ATTRS(dataset_id)
    for k=0,Attribute_num-1 do begin
        ;获取属性
        sds_att_id=H5A_OPEN_IDX(dataset_id,k)
        sds_att_name=H5A_GET_NAME(sds_att_id)
        sds_att_value=H5A_READ(sds_att_id)
        sds_att_type=H5A_GET_TYPE(sds_att_id)
        ;写出属性
        ;属性dataspace的大小必须和属性包含的内容的个数一致
        dataspace_id = H5S_CREATE_SIMPLE(n_elements(sds_att_value))
        attr_id = H5A_CREATE(Outdataset_id,sds_att_name,sds_att_type,dataspace_id)
        H5A_WRITE,attr_id,sds_att_value
        H5A_CLOSE,attr_id
    endfor
  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值