MODIS 多个时间文件合并成一个文件

目的:需要读取多年MODIS数据,需将2000-2020年每个月一个nc数据合并成一个nc文件
MODIS的数据格式:
MOD08_M3.A2000153.061.2017276072839
其中2000代表year, 153代表day of year

#day of year 转 month,day
def doy2date(year,doy):
    month_leapyear = [31,29,31,30,31,30,31,31,30,31,30,31]
    month_notleap = [31,28,31,30,31,30,31,31,30,31,30,31]

    if year%4==0 and (year%100!=0 or year%400==0):
        for i in range(0,12):
            if doy>month_leapyear[i]:
                doy-=month_leapyear[i]
                continue
            if doy<=month_leapyear[i]:
                month = i+1
                day = doy
                break
    else:
        for i in range(0,12):
            if doy>month_notleap[i]:
                doy-=month_notleap[i]
                continue
            if doy<=month_notleap[i]:
                month = i+1
                day = doy
                break
    return month,day

```python
#创建nc文件
out_dir = 'H:/machinelearning/'
out_file_nc = out_dir + 'out.nc'
# data_nc = np.zeros(shape=(61, 1000, 2000))
filename = out_file_nc
# value = data_nc

gridspi = Dataset(filename, 'w', format='NETCDF4')
# dimensions
gridspi.createDimension('time', None)
gridspi.createDimension('lat', 180)  # len(lat)
gridspi.createDimension('lon', 360)
# Create coordinate variables for dimensions
times = gridspi.createVariable('time', 'S19', ('time',))
# times = gridspi.createVariable('time', np.float64, ('time',))

latitudes = gridspi.createVariable('lat', np.float32, ('lat',))
longitudes = gridspi.createVariable('lon', np.float32, ('lon',))
clf = gridspi.createVariable('clf', np.float32, ('time', 'lat', 'lon',))

# 写入数据
dates = []
clfs = []
for file in os.listdir(modisDir):
    data = xr.open_dataset(modisDir+file,engine='netcdf4')['Cloud_Retrieval_Fraction_1L_Liquid_FMean']
    year = int(file[10:14])
    doy = int(file[14:17])
    [month,day] = doy2date(year, doy)
    dates.append(str(year)+'-'+str(month)+'-'+str(day))
    date = datetime(year,month, day)
    dates.append(date)
    clfs.append(data[:])

# 向nc文件中写入数据
latitudes[:] = data['YDim:mod08']
longitudes[:] = data['XDim:mod08']
clf[:] = clfs
#可以以string的形式写入,dtype是object,后续无法对时间维度进行时间上的操作例如groupby等
times[:] = dates_dt.strftime('%Y-%m-%d').to_numpy()
gridspi.close()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值