import numpy as np from pyhdf.SD import SD ######################################## # FUNCTION # ######################################## # function for reading variables inside an hdf4 file def read_hdf(fstr, varlist=[]): """read_hdf(fstr[, varlist]) read the variables provided as inputs from an hdf4 file and save them into a dictionary Parameters ---------- fstr : string name of the hdf4file varlist : array [string] name of the variables to be read inside the file default = 0 (reads the entire file) Returns ------- output : dictionary dictionary of variables contained in the input hdf4 file """ #read open the hdf file hdff = SD(fstr); #define the string of variables to read if not defined if varlist != []: varlist = varlist; else: varlist = hdff.datasets(); varlist = varlist.keys(); #end var list files #define the dictionary output = {}; for varname in varlist: vartmp = hdff.select(varname); attr = vartmp.attributes(); attr_list = attr.keys(); var = vartmp.get(); varf = var.astype('float64') if '_FillValue' in attr_list: fillvalue = attr['_FillValue']; fillidx = np.where(varf == fillvalue); varf[fillidx]=0 #np.nan; else: fillvalue = 0 if 'add_offset' in attr_list: add_offset = attr['add_offset']; else: add_offset = 0; if 'scale_factor' in attr_list: scale_factor = attr['scale_factor']; else: scale_factor = 1 output[varname] = varf*scale_factor+add_offset; hdff.end() return output