访问 netcdf 文件中嵌套组中的变量文件格式 HDF5

问题描述

我正在尝试使用 python 和 netcdf4 库访问 NETCDF4_CLASSIC 文件中的对象“纬度”,但没有成功。当我打开文件时:

ncFile = '/path/to/file.nc4'
f = netCDF4.Dataset(ncFile,'r')
f 

我得到这个结构:

NETCDF4_CLASSIC
<class 'netCDF4._netCDF4.Dataset'>
root group (NETCDF4_CLASSIC data model,file format HDF5):
    StructMetadata_0: GROUP=SwathStructure
    GROUP=SWATH_1
        SwathName="2B-CLDCLASS"
        GROUP=Dimension
            OBJECT=Dimension_1
                DimensionName="nray"
                Size=37081
            END_OBJECT=Dimension_1
            OBJECT=Dimension_2
                DimensionName="scalar"
                Size=1
            END_OBJECT=Dimension_2
            OBJECT=Dimension_3
                DimensionName="nbin"
                Size=125
            END_OBJECT=Dimension_3
            OBJECT=Dimension_4
                DimensionName="Ncloud"
                Size=10
            END_OBJECT=Dimension_4
        END_GROUP=Dimension
        GROUP=DimensionMap
        END_GROUP=DimensionMap
        GROUP=IndexDimensionMap
        END_GROUP=IndexDimensionMap
        GROUP=GeoField
            OBJECT=GeoField_1
                GeoFieldName="Profile_time"
                DataType=DFNT_FLOAT32
                DimList=("nray")
            END_OBJECT=GeoField_1
            OBJECT=GeoField_2
                GeoFieldName="UTC_start"
                DataType=DFNT_FLOAT32
                DimList=("scalar")
            END_OBJECT=GeoField_2
            OBJECT=GeoField_3
                GeoFieldName="TAI_start"
                DataType=DFNT_FLOAT64
                DimList=("scalar")
            END_OBJECT=GeoField_3
            OBJECT=GeoField_4
                GeoFieldName="Latitude"
                DataType=DFNT_FLOAT32
                DimList=("nray")
            END_OBJECT=GeoField_4
            OBJECT=GeoField_5
                GeoFieldName="Longitude"
                DataType=DFNT_FLOAT32
                DimList=("nray")
            END_OBJECT=GeoField_5
            OBJECT=GeoField_6
                GeoFieldName="Height"
                DataType=DFNT_INT16
                DimList=("nray","nbin")
            END_OBJECT=GeoField_6
            OBJECT=GeoField_7
                GeoFieldName="Range_to_intercept"
                DataType=DFNT_FLOAT32
                DimList=("nray")
            END_OBJECT=GeoField_7
            OBJECT=GeoField_8
                GeoFieldName="DEM_elevation"
                DataType=DFNT_INT16
                DimList=("nray")
            END_OBJECT=GeoField_8
            OBJECT=GeoField_9
                GeoFieldName="Vertical_binsize"
                DataType=DFNT_FLOAT32
                DimList=("scalar")
            END_OBJECT=GeoField_9
            OBJECT=GeoField_10
                GeoFieldName="Pitch_offset"
                DataType=DFNT_FLOAT32
                DimList=("scalar")
            END_OBJECT=GeoField_10
            OBJECT=GeoField_11
                GeoFieldName="Roll_offset"
                DataType=DFNT_FLOAT32
                DimList=("scalar")
            END_OBJECT=GeoField_11
        END_GROUP=GeoField
        GROUP=datafield
            OBJECT=datafield_1
                datafieldName="Data_quality"
                DataType=DFNT_UINT8
                DimList=("nray")
            END_OBJECT=datafield_1
            OBJECT=datafield_2
                datafieldName="Data_status"
                DataType=DFNT_UINT16
                DimList=("nray")
            END_OBJECT=datafield_2
            OBJECT=datafield_3
                datafieldName="Data_targetID"
                DataType=DFNT_UINT8
                DimList=("nray")
            END_OBJECT=datafield_3
            OBJECT=datafield_4
                datafieldName="RayStatus_validity"
                DataType=DFNT_UINT8
                DimList=("nray")
            END_OBJECT=datafield_4
            OBJECT=datafield_5
                datafieldName="Navigation_land_sea_flag"
                DataType=DFNT_UINT8
                DimList=("nray")
            END_OBJECT=datafield_5
            OBJECT=datafield_6
                datafieldName="Precip_flag"
                DataType=DFNT_INT8
                DimList=("nray")
            END_OBJECT=datafield_6
            OBJECT=datafield_7
                datafieldName="sst"
                DataType=DFNT_FLOAT32
                DimList=("nray")
            END_OBJECT=datafield_7
            OBJECT=datafield_8
                datafieldName="Surface_wind"
                DataType=DFNT_FLOAT32
                DimList=("nray")
            END_OBJECT=datafield_8
            OBJECT=datafield_9
                datafieldName="cloud_scenario"
                DataType=DFNT_INT16
                DimList=("nray","nbin")
                CompressionType=HDFE_COMP_DEFLATE
                DeflateLevel=4
            END_OBJECT=datafield_9
            OBJECT=datafield_10
                datafieldName="CloudLayer"
                DataType=DFNT_INT16
                DimList=("nray")
            END_OBJECT=datafield_10
            OBJECT=datafield_11
                datafieldName="CloudLayerBase"
                DataType=DFNT_FLOAT32
                DimList=("nray","Ncloud")
                CompressionType=HDFE_COMP_DEFLATE
                DeflateLevel=4
            END_OBJECT=datafield_11
            OBJECT=datafield_12
                datafieldName="CloudLayerTop"
                DataType=DFNT_FLOAT32
                DimList=("nray","Ncloud")
                CompressionType=HDFE_COMP_DEFLATE
                DeflateLevel=4
            END_OBJECT=datafield_12
            OBJECT=datafield_13
                datafieldName="CloudLayerType"
                DataType=DFNT_INT16
                DimList=("nray","Ncloud")
                CompressionType=HDFE_COMP_DEFLATE
                DeflateLevel=4
            END_OBJECT=datafield_13
        END_GROUP=datafield
        GROUP=MergedFields
        END_GROUP=MergedFields
    END_GROUP=SWATH_1
END_GROUP=SwathStructure
GROUP=GridStructure
END_GROUP=GridStructure
GROUP=PointStructure
END_GROUP=PointStructure
END
    HDFEOsversion: HDFEOS_V2.5
    creation_date: Wed Feb 17 03:59:37 UTC 2021
    NCL_Version: 6.6.2
    system: Linux 0fc9309f2c2a 4.19.112+ #1 SMP Thu Jul 23 08:00:38 PDT 2020 x86_64 x86_64 x86_64 GNU/Linux
    Conventions: None
    hdf_source: 2010017014344_19801_CS_2B-CLDCLASS_GRANULE_P1_R05_E03_F00.hdf
    title: NCL: convert-HDF-to-netCDF
    dimensions(sizes): nray_2B_CLDCLASS(37081),nbin_2B_CLDCLASS(125),Ncloud_2B_CLDCLASS(10)
    variables(dimensions): int16 Height(nray_2B_CLDCLASS,nbin_2B_CLDCLASS),int16 cloud_scenario(nray_2B_CLDCLASS,float32 CloudLayerBase(nray_2B_CLDCLASS,Ncloud_2B_CLDCLASS),float32 CloudLayerTop(nray_2B_CLDCLASS,int16 CloudLayerType(nray_2B_CLDCLASS,Ncloud_2B_CLDCLASS)
    groups: 

我试过 this 并没有奏效。此外,当我尝试使用 f.variables.keys() 检索变量键时,我得到了

odict_keys(['Height','cloud_scenario','CloudLayerBase','CloudLayerTop','CloudLayerType'])

似乎“高度”是一个变量而“纬度”不是,即使它们在同一个组中。我也试过 f.groups 并且输出只是 OrderedDict()

文件是 Cloudsat CLDCLASS.hdf 通过 NCL 转换为 .nc (convert2nc)。

任何提示将不胜感激。我是 NetCDF 领域的新手。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)