爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

搜索
12
返回列表 发新帖
楼主: MeteoInfo

MeteoInfoLab脚本示例:创建netCDF文件(合并文件)

[复制链接]

新浪微博达人勋

 楼主| 发表于 2020-3-30 20:40:25 | 显示全部楼层
tobewealthy 发表于 2020-3-30 20:25
王老师我下最新版本啦  在meteoinfo qq群里找的最新版本,有一个新的错误。。
这句报错:ncfile.write(v ...

你可以把你的程序贴出来看看
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

发表于 2020-3-30 21:15:09 | 显示全部楼层
王老师这是我的程序:计算某年的春季aaod均值后写文件
import glob

datadir = 'D:/OMI/OMI_extract_data_file'
outfn = os.path.join(datadir, 'OMI_aaod_seasonal_mean_2005.nc')
#creat new nc file:
ncfile = addfile(outfn,'c')

#add global attributes
ncfile.addgroupattr('Conventions','Unidata Observation Dataset v1.0')

#read data
spring_aaod = []
files_list = glob.glob(r'D:/OMI/OMI_data/OMI-Aura_L3-OMAERUVd_*.he5.nc')
for files in files_list:
        file_time = files.split('d_')[1].split('_')[0]
        file_year = file_time[:4]
        file_month = file_time[5:7]

        #read data
        if file_year == '2005':
                if file_month == '03':
                        fn = addfile(files)
                        aaod = fn['FinalAerosolAbsOpticalDepth500']['17:40','70:110']
                        aaod[aaod < 0] = nan
                        spring_aaod.append(aaod)

                if file_month == '04':
                        fn = addfile(files)
                        aaod = fn['FinalAerosolAbsOpticalDepth500']['17:40','70:110']
                        aaod[aaod < 0] = nan
                        spring_aaod.append(aaod)

                if file_month == '05':
                        fn = addfile(files)
                        aaod = fn['FinalAerosolAbsOpticalDepth500']['17:40','70:110']
                        aaod[aaod < 0] = nan
                        spring_aaod.append(aaod)
                       
                lat = fn['lat'][:]
                lon = fn['lon'][:]
               
aaod_05_spr_mean = mean(spring_aaod, axis = 0)
l = len(aaod_05_spr_mean)

#add dimensions
lat = ncfile.adddim('latitude',m)
lon = ncfile.adddim('longitude',n)

#add variables
variables = []
#add latitude
var = ncfile.addvar('lat','float', [lat])
var.addattr('long_name','Latitude')
var.addattr('units','degrees_east')
variables.append(var)
#add lontitude
var = ncfile.addvar('lon','float', [lon])
var.addattr('long_name','Longitude')
var.addattr('units','degrees_north')
variables.append(var)
#add aaod seasonal mean
var = ncfile.addvar('OMI_05_spring_mean','float', [lat, lon])
var.addattr('long_name','aaod 05 spring seasonal mean')
var.addattr('units','NoUnits')
var.addattr('units','degree_north')
variables.append(var)

#creat ncfile
ncfile.create()

#write data
#ncfile.write(variables[0],lat)
#ncfile.write(variables[1],lon)
ncfile.write(variables[0],aaod_05_spr_mean)

#close ncfile
ncfile.flush()
ncfile.close()

print'Finished!'
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

 楼主| 发表于 2020-3-30 22:57:16 | 显示全部楼层
tobewealthy 发表于 2020-3-30 21:15
王老师这是我的程序:计算某年的春季aaod均值后写文件
import glob

ncfile.write(variables[0],aaod_05_spr_mean)
改为:
ncfile.write(variables[2],aaod_05_spr_mean)
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

发表于 2020-3-31 09:04:16 | 显示全部楼层
调通了!谢谢王老师
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

发表于 2021-9-2 10:40:51 | 显示全部楼层
本帖最后由 油油切克闹 于 2021-9-6 10:27 编辑

已经自己发现问题了,没事了,自己琢磨还是挺有收获感的
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

发表于 2022-1-26 17:32:51 | 显示全部楼层
老师,我在存储数据的时候,遇到以下报错,好像是list和array的使用异常,但还是不知道改哪里。
第73行就是“ncfile.write(variables[0], latitude)”

  File "M:\WRFDATA\sigmaTohpa.py", line 73, in <module>
    ncfile.write(variables[0], array(latitude))
  File "D:\software\MeteoInfo_3.2.2\MeteoInfo\pylib\mipylib\dataset\dimdatafile.py", line 493, in write
    self.ncfile.write(ncvariable, value)
        at ucar.nc2.NetcdfFileWriter.write(NetcdfFileWriter.java:1071)

        at ucar.nc2.NetcdfFileWriter.write(NetcdfFileWriter.java:1053)

        at sun.reflect.GeneratedMethodAccessor129.invoke(Unknown Source)

        at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)

        at java.lang.reflect.Method.invoke(Unknown Source)

java.lang.UnsupportedOperationException: java.lang.UnsupportedOperationException: in define mode



fn = 'M:/WRFDATA/wrfout_d02_2020-04-14_05_38_00'
f = addfile(fn)
time = fn.split('_')[2]+fn.split('_')[3]+':'+fn.split('_')[4]+':'+fn.split('_')[5]
#Calculate pressure array
pp = f['P'][:]
psb = f['PB'][:]
ptop = f['P_TOP'][0]
eta = f['ZNU'][0]
latitude = f['XLAT'][:]
longitude = f['XLONG'][:]
nz,ny,nx = pp.shape
eta = eta.reshape(nz,1,1)
pres = (psb * eta + ptop + pp) * 0.01
#Read and de-stagger u and v
u = f['U'][:]
v = f['V'][:]
destag_u = meteo.wrf.destagger(u, -1)
destag_v = meteo.wrf.destagger(v, -2)
y = destag_u.dimvalue(-2)
x = destag_u.dimvalue(-1)
#Interpolate u and v to pressure level
levels = [800, 750, 500, 200]
uwind = meteo.log_interpolate_1d(levels, pres, destag_u, axis=0)
vwind = meteo.log_interpolate_1d(levels, pres, destag_v, axis=0)

#Save netcdf file
outfn = 'M:/WRFDATA/'+fn.split('/')[2]+'.NC'
ncfile = addfile(outfn, 'c')

ledim = ncfile.adddim('bottom_top', 4)
sndim = ncfile.adddim('south_north', ny)
wedim = ncfile.adddim('west_east', nx)

ncfile.addgroupattr('ITLE', ' OUTPUT FROM *             PROGRAM:WRF-Chem V4.0.3 MODEL')
ncfile.addgroupattr('START_DATE', time)
ncfile.addgroupattr('SIMULATION_START_DATE', time)
ncfile.addgroupattr('WEST-EAST_GRID_DIMENSION', nx)
ncfile.addgroupattr('WEST-EAST_GRID_DIMENSION', ny)
ncfile.addgroupattr('WEST-EAST_GRID_DIMENSION', 4)
ncfile.addgroupattr('DX', '1000.0f')
ncfile.addgroupattr('DY', '1000.0f')

variables = []
var0 = ncfile.addvar('XLAT', 'float', [sndim, wedim])    #Latitude
var0.addattr('description', 'LATITUDE, SOUTH IS NEGATIVE')
var0.addattr('units', 'degree_north')
var0.addattr('coordinates', 'XLONG XLAT')
variables.append(var0)

var1 = ncfile.addvar('XLONG', 'float', [sndim, wedim])    #Longitude
var1.addattr('description', 'LONGITUDE, SOUTH IS NEGATIVE')
var1.addattr('units', 'degree_east')
var1.addattr('coordinates', 'XLONG XLAT')
variables.append(var1)

var2 = ncfile.addvar('LEVEL', 'int', [ledim])    #Level
var2.addattr('description', 'PRESSURE LEVEL')
var2.addattr('units', 'hPa')
variables.append(var2)

var3 = ncfile.addvar('U', 'float', [ledim, sndim, wedim])    #U
var3.addattr('description', 'x-wind component')
var3.addattr('units', 'm s-1')
var3.addattr('coordinates', 'XLONG_U XLAT_U XTIME')
variables.append(var3)

var4 = ncfile.addvar('V', 'float', [ledim, sndim, wedim])   #V
var4.addattr('description', 'y-wind component')
var4.addattr('units', 'm s-1')
var4.addattr('coordinates', 'XLONG_V XLAT_V XTIME')
variables.append(var4)

ncfile.write(variables[0], latitude)
ncfile.write(variables[1], longitude)
ncfile.write(variables[2], array(levels))
ncfile.write(variables[3], uwind)
ncfile.write(variables[4], vwind)

ncfile.flush()
ncfile.close()

密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

 楼主| 发表于 2022-1-26 17:51:21 | 显示全部楼层
哈库拉玛塔塔000 发表于 2022-1-26 17:32
老师,我在存储数据的时候,遇到以下报错,好像是list和array的使用异常,但还是不知道改哪里。
第73行就 ...

nc文件维、变量、属性等定义完后要创建(ncfile.create()),然后再写数据。参考这里:http://www.meteothink.org/exampl ... le_io/write_nc.html
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

发表于 2022-1-27 09:33:39 | 显示全部楼层
MeteoInfo 发表于 2022-1-26 17:51
nc文件维、变量、属性等定义完后要创建(ncfile.create()),然后再写数据。参考这里:http://www.meteot ...

好的,谢谢老师
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册 新浪微博登陆

本版积分规则

Copyright ©2011-2014 bbs.06climate.com All Rights Reserved.  Powered by Discuz! (京ICP-10201084)

本站信息均由会员发表,不代表气象家园立场,禁止在本站发表与国家法律相抵触言论

快速回复 返回顶部 返回列表