Guest User

Untitled

a guest
Oct 17th, 2018
102
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.74 KB | None | 0 0
  1. from netCDF4 import Dataset
  2. import glob
  3. import datetime
  4.  
  5. def copy_static(i,o):
  6. #copy dimensions
  7. for (dn, dim) in i.dimensions.items():
  8. o.createDimension(dn, len(dim) if not dim.isunlimited() else None)
  9.  
  10. #copy variables
  11. for (vn, ivar) in i.variables.items():
  12. ovar = o.createVariable(vn, ivar.datatype, ivar.dimensions)
  13.  
  14. #copy variable attributes
  15. ovar.setncatts({an: ivar.getncattr(an) for an in ivar.ncattrs()})
  16. ovar[:] = ivar[:]
  17.  
  18. def concat(i, o):
  19. for (name, ovar) in o.variables.items():
  20. if name == "time": #unit->hours
  21. otime = datetime.datetime(*list(int(j[-1]) if len(j) == 2 and j[0] == 0 else
  22. int(j) for j in ovar.units.split()[2].split("-")))
  23.  
  24. #calculate time of input files
  25. for index, fin in enumerate(i):
  26. if index != 0:
  27. ivar = fin.variables[name]
  28. itime = datetime.datetime(*list(int(j[-1]) if len(j) == 2 and j[0] == 0 else
  29. int(j) for j in ivar.units.split()[2].split("-")))
  30. hour = (otime - itime).total_seconds() / 3600
  31. ovar[index] = hour
  32.  
  33. elif name == "Canint" or name == "SWE":
  34. for index, fin in enumerate(i):
  35. if index != 0:
  36. ovar[index] = fin.variables[name][:]
  37.  
  38. if __name__ == "__main__":
  39. fin = raw_input("Enter input files( separated by spaces): ")
  40. fout = raw_input("Enter an output file: ")
  41.  
  42. fin = fin.split()
  43. if len(fin) == 1:
  44. fin = glob.glob(fin[0])
  45.  
  46. input_list = [ Dataset(i) for i in fin ]
  47. output_file = Dataset(fout, 'w', format="NETCDF4")
  48.  
  49. copy_static(input_list[0], output_file)
  50. concat(input_list, output_file)
Add Comment
Please, Sign In to add comment