Python读取TMRR3B43 月降雨量数据Hdf文件

下面展示 读取TRMM 3B43类,实现
1.查看HDF文件属性
2.查看数据集的属性
3.读取数据集
4.计算月降雨量,原始数据为mm/h计算为mm/month。

class ReadAndWrite_Hdf2Tif:
    def __init__(self,readFilename=None):
        self.readFilename=readFilename
        self.hdf = SD(self.readFilename)

# 查看HDF文件属性
    def read_HDFAttribute(self):

        attr = self.hdf.attributes(full=1)
        attrNames = attr.keys()
        attributesList=[]
        for name in attrNames:
            dict={}
            t = attr[name]
            dict={name:t[0]}
            attributesList.append(dict)
        print(attributesList)
        self.hdf.end()
        return attributesList

# 查看数据集的属性
    def read_HDFDatasetAttribute(self):
        #hdf=SD(self.readFilename)
        dSets=self.hdf.datasets()   #以字典形式显示数据集的文件名,行列号
        dsName=dSets.keys()    #为SD.SDS对象
        for name in dsName:
            ds=self.hdf.select(name)
            t=dSets[name]
        print(dSets)
        self.hdf.end()
        return dSets

# 读取HDF数据集
#     def readHDFData(self,datasetName):
#         hdf = SD(self.readFilename)
#         dataset=self.hdf.select(datasetName).get()
#         return dataset

# 以月降雨量读取TRMM数据
    def readTRMMData(self):
        #hdf = SD(self.readFilename)
        TRMMdataset = self.hdf.select(datasetName).get()
        monthArray=[31,28,31,30,31,30,31,31,30,31,30,31]
        year=int(self.readFilename[self.readFilename.find('.')+1:self.readFilename.find('.')+5])
        month=int(self.readFilename[self.readFilename.find('.')+5:self.readFilename.find('.')+7])
        if year==2008:
            monthArray[1]=29
        im_data=TRMMdataset*monthArray[month-1]*24            #数据单位为mm/hour将数据转为每月降水量
        im_data=np.fliplr(im_data).T                         #数据原点为西南,需要进行数据翻转
        np.putmask(im_data, im_data < 0, None)  # 将小于0数据置为None
        del TRMMdataset
        self.hdf.end()
        return im_data
  • 2
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值