- Timestamp:
- Apr 4, 2018, 5:20:47 PM (7 years ago)
- Location:
- trunk/tools
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/tools/nc_var.py
r1884 r1889 23 23 ## e.g. # nc_var.py -o ifile -f ../PY/wrfout_d01_1995-01-01_00:00:00 24 24 ## e.g. # nc_var.py -o splitfile_dim -S bottom_top:ZNU:QVAPOR_ZNU:.4f -v QVAPOR,XLONG,XLAT,Times -f ~/PY/wrfout_d01_1995-01-01_00:00:00 25 ## e.g. # nc_var.py -o itime -S WRFtime -f ../PY/wrfout_d01_1995-01-01_00:00:00 -v Times 25 26 26 27 ## e.g. ccrc468-17 # ./nc_var.py -v time -f 123/CCRC_NARCliM_Sydney_All_1990-1999_pr10max.nc -o out -S 1:-1 … … 119 120 # isgattrs: Give a single global attribute of a file and its type 120 121 # isvattrs: Give a single attribute of a variable 122 # itime: Function to provide information of the time from a netCDF file 121 123 # ivars: Give all the variable names of a file 122 124 # ivattrs: Give all the attributes of a variable and its type … … 197 199 'getvalues_lonlat', 'getvars_tofile', 'grattr', \ 198 200 'grmattr', 'idims', 'ifile', 'igattrs', 'increaseDimvar', 'isgattrs', \ 199 'isvattrs', 'i vars', 'ivattrs', 'LMDZ_toCF', 'lonlat_polygon', 'maskvar',\201 'isvattrs', 'itime', 'ivars', 'ivattrs', 'LMDZ_toCF', 'lonlat_polygon', 'maskvar', \ 200 202 'merge_files', 'model_characteristics', \ 201 203 'mthDYNAMICO_toCF', 'ncreplace', 'ncstepdiff', 'netcdf_concatenation', \ … … 394 396 elif oper == 'isvattrs': 395 397 ncvar.isvattrs(opts.values, opts.ncfile, opts.varname) 398 elif oper == 'itime': 399 ncvar.itime(opts.values, opts.ncfile, opts.varname) 396 400 elif oper == 'ivars': 397 401 ncvar.ivars(opts.ncfile) -
trunk/tools/nc_var_tools.py
r1888 r1889 96 96 # isgattrs: Give a single global attribute of a file and its type 97 97 # isvattrs: Give a single attribute of a variable 98 # itime: Function to provide information of the time from a netCDF file 98 99 # ivars: Give all the variable names of a file 99 100 # ivattrs: Give all the attributes of a variable and its type … … 24215 24216 24216 24217 return 24218 24219 def itime(values, ncfile, variable): 24220 """ Function to provide information of the time from a netCDF file 24221 values=[tkind] 24222 [tkind]: kind of variable time 24223 'WRFtime': for WRF derived time values (String variable) 24224 'CFtime': time following CF-conventions (as [tunits] since [refdate]) 24225 'string',[tfmt]: time values as a given string format [tfmt] (following python specification) 24226 ncfile= file from which provide the information 24227 variable= name of the variable time in the file 24228 """ 24229 import datetime as dt 24230 fname = 'itime' 24231 24232 availtkind = ['WRFtime', 'CFtime', 'string,[tfmt]'] 24233 24234 if values == 'h': 24235 print fname + '_____________________________________________________________' 24236 print itime.__doc__ 24237 quit() 24238 24239 expectargs = '[tkind]' 24240 gen.check_arguments(fname, values, expectargs, ':') 24241 24242 tkind = values.split(':')[0] 24243 24244 onc = NetCDFFile(ncfile, 'r') 24245 24246 if not onc.variables.has_key(variable): 24247 ncvars = list(onc.variables.keys()) 24248 ncvars.sort() 24249 print errormsg 24250 print ' ' + fname + ": file '" + ncfile + "' does not have variable '" + \ 24251 variable + "' !!" 24252 print ' available ones:', ncvars 24253 onc.close() 24254 quit(-1) 24255 24256 otvar = onc.variables[variable] 24257 itvals = otvar[:] 24258 if tkind[0:7] == 'WRFtime': 24259 tvals, utime = compute_WRFtime(itvals) 24260 mattvals = np.zeros((itvals.shape[0],6), dtype=int) 24261 for it in range(len(tvals)): 24262 mattvals[it,:]= gen.datetimeStr_conversion(str(tvals[it]), \ 24263 'cfTime,minutes since 1949-12-01 00:00:00', 'matYmdHMS') 24264 elif tkind[0:6] == 'CFtime': 24265 tvals = itvals.copy() 24266 utime = otvar.getncattr('units') 24267 mattvals = np.zeros((itvals.shape[0],6), dtype=int) 24268 for it in range(len(tvals)): 24269 mattvals[it,:]= gen.datetimeStr_conversion(str(tvals[it]), \ 24270 'cfTime,'+utime, 'matYmdHMS') 24271 elif tkind[0:6] == 'string': 24272 tfmt = tkind.split(',')[1] 24273 tvals = [] 24274 mattvals = np.zeros((itvals.shape[0],6), dtype=int) 24275 for it in range(itvals.shape[0]): 24276 mattvals[it,:] = dt.datetime.string(''.join(itvals[it,:]),tfmt) 24277 tvals[it] = gen.datetimeStr_conversion(mattvals[it,:].strftime("%Y%m%d"+ \ 24278 "%H%M%S"), 'YmdHMS', 'cfTime,minutes since 1949-12-01 00:00:00') 24279 else: 24280 print errormsg 24281 print ' ' + fname + ": time kind '" + tkind + "' not ready !!" 24282 print ' available ones:', availtkind 24283 quit(-1) 24284 24285 # Getting information 24286 dimt = mattvals.shape[0] 24287 print 'First_date:', mattvals[0,:] 24288 print 'Last_date:', mattvals[dimt-1,:] 24289 print 'dimt:', dimt 24290 date1 = dt.datetime(mattvals[0,0], mattvals[0,1], mattvals[0,2], mattvals[0,3], \ 24291 mattvals[0,4], mattvals[0,5]) 24292 date2 = dt.datetime(mattvals[1,0], mattvals[1,1], mattvals[1,2], mattvals[1,3], \ 24293 mattvals[1,4], mattvals[1,5]) 24294 diffdate = date2 - date1 24295 if gen.searchInlist(dir(diffdate),'total_seconds'): 24296 totsecs = diffdate.total_seconds() 24297 else: 24298 totsecs = diffdate.days()*24*3600. + diffdate.seconds() 24299 24300 print 'diffdate_2nd-1st:', diffdate 24301 print 'diff_seconds_2nd-1st:', totsecs 24302 24303 for it in range(1,dimt-1): 24304 it1 = it + 1 24305 date1 = dt.datetime(mattvals[it,0], mattvals[it,1], mattvals[it,2], \ 24306 mattvals[it,3], mattvals[it,4], mattvals[it,5]) 24307 date2 = dt.datetime(mattvals[it1,0], mattvals[it1,1], mattvals[it1,2], \ 24308 mattvals[it1,3], mattvals[it1,4], mattvals[it1,5]) 24309 diffdate = date2 - date1 24310 if gen.searchInlist(dir(diffdate),'total_seconds'): 24311 newtotsecs = diffdate.total_seconds() 24312 else: 24313 newtotsecs = diffdate.days()*24*3600. + diffdate.seconds() 24314 if newtotsecs != totsecs: 24315 print ' different_diff_seconds_between_it_' + str(it) + '_and_' + \ 24316 str(it1) + ':', newtotsecs 24317 24318 # attributes 24319 for attrn in otvar.ncattrs(): 24320 attrv = otvar.getncattr(attrn) 24321 print 'Tattr_@' + attrn + '@:', attrv.replace(' ','!') 24322 24323 onc.close() 24324 24325 return 24326 24327 #itime('WRFtime', '../PY/wrfout_d01_1995-01-01_00:00:00', 'Times') 24328 24217 24329 #quit()
Note: See TracChangeset
for help on using the changeset viewer.