hdf 文件通常由多个vgroup组成,每个vgroup 的元素可以是另一个vgroup, vdata 和dataset(数据集)。
网上不少文章介绍了pyhdf的SD模块读hdf文件。实际上SD模块提供的是操作dataset的API,如果我们需要的数据放在vdata里仅仅通过SD模块读取的,而且当不同的vgroup下的dataset同名,用SD.select(datasetname)取出的dataset不确定是哪个vgroup下的。所以比较保险的方法应该是从最外层的Vgroup模块开始,一层层的往里获得我们想要的数据。
实际上pyhdf还提供了操作Vdata的VS模块,和操作vgroup的V模块,如下图:
接下来给出的例子将用SD,HDF(打包的V和VS模块)对amsre文件进行操作, amsre是hdf文件它的结构如下:
它的最外层包含3个vgroup,分别为Low_Res_Swath, High_Res_A_Swath和High_Res_B_Swath。Low_Res_Swath 下还有3个vgroup——Geolocation Fields, Data Fields和Swath_Attributes。Geolocation下有一个Vdata(Times)和两个dataset(Latitude,Longitude), High_Res_A_Swath和High_Res_B_Swath