数据的保存之使用python手动保存netCDF文件(xxx.nc)

       在网上搜过手动保存NC文件的代码,大多数我都用不了,不是这里报错就是那里不存在某定义项,一看时间,发帖都好几年前……想必都是老NC版本了。后来偶得一保存方式的代码,甚是喜欢。这个保存的代码很简单,就是单纯的把物理量和经纬度分为三个变量(key)保存进去,非常地通俗易懂简便快捷。可是随着我对数据要求越来越高,使用CDO或者NCL进行操作的时候,其鸡肋性的报错便发生了!(报错说文件缺少某某某属性某某维度……)

       于是我果断放弃网络搜索,转向nc官网,将官网的属性、数据、维度等定义都看了一遍,就这样我自闭了一天。直到晚上,在经历了各种报错尝试和bu不断地深入自闭后,我竟然成功了???!!!!

废话太多,果断上代码。

##假设存入物理量TMAX 数据形状(10,18,19)
#首先创建nc文件
ncfile = D('new.nc','w',format = 'NETCDF4')

#添加坐标轴(经度纬度和时间)这边19、18是我经纬格点数目
xdim = ncfile.createDimension('lon',19)
ydim = ncfile.createDimension('lat',18)
tdim = ncfile.createDimension('time',len(TMAX))
    
#添加全局属性,比如经纬度和标题,主要是对数据进行一个简单的介绍
ncfile.setncattr_string('title','TEMPERATURE')
ncfile.setncattr_string('geospatial_lat_min','19.5 degrees')
ncfile.setncattr_string('geospatial_lat_max','45 degrees')
ncfile.setncattr_string('geospatial_lon_min','105 degrees')
ncfile.setncattr_string('geospatial_lon_max','132 degrees')
    
#添加变量和局部属性,存入数据
var = ncfile.createVariable('lon',np.float32,'lon')
var.setncattr_string('long_name','longitude')
var.setncattr_string('units','degrees_east')
var[:]=lon

var = ncfile.createVariable('lat',np.float32,'lat')
var.setncattr_string('long_name','latitude')
var.setncattr_string('units','degrees_north')
var[:]=lat

tvar = ncfile.createVariable('time',np.int,'time')
tvar.setncattr_string('long_name','time')
tvar.setncattr_string('units','days since 0000-01-01')
tvar.calendar = "standard"
tvar[:]=len(TMAX)
    
var = ncfile.createVariable('TMAX',np.float,('time','lat','lon'))
var.setncattr_string('long_name','Temperature')
var.setncattr_string('units','C')
var[:]=TMAX
    
#关闭文件
ncfile.close()

暂且将上面生成的nc称作标准nc文件吧。(已对其进行CDO、NCL等一些操作,包括作图,暂未发现问题。)自闭的我终于舒缓了一口气。

若对你有用,点个赞再走,若有纰漏,尽管讲~~

你可能感兴趣的:(气象,python,python)