Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- from netCDF4 import Dataset
- import glob
- import datetime
- def copy_static(i,o):
- #copy dimensions
- for (dn, dim) in i.dimensions.items():
- o.createDimension(dn, len(dim) if not dim.isunlimited() else None)
- #copy variables
- for (vn, ivar) in i.variables.items():
- ovar = o.createVariable(vn, ivar.datatype, ivar.dimensions)
- #copy variable attributes
- ovar.setncatts({an: ivar.getncattr(an) for an in ivar.ncattrs()})
- ovar[:] = ivar[:]
- def concat(i, o):
- for (name, ovar) in o.variables.items():
- if name == "time": #unit->hours
- otime = datetime.datetime(*list(int(j[-1]) if len(j) == 2 and j[0] == 0 else
- int(j) for j in ovar.units.split()[2].split("-")))
- #calculate time of input files
- for index, fin in enumerate(i):
- if index != 0:
- ivar = fin.variables[name]
- itime = datetime.datetime(*list(int(j[-1]) if len(j) == 2 and j[0] == 0 else
- int(j) for j in ivar.units.split()[2].split("-")))
- hour = (otime - itime).total_seconds() / 3600
- ovar[index] = hour
- elif name == "Canint" or name == "SWE":
- for index, fin in enumerate(i):
- if index != 0:
- ovar[index] = fin.variables[name][:]
- if __name__ == "__main__":
- fin = raw_input("Enter input files( separated by spaces): ")
- fout = raw_input("Enter an output file: ")
- fin = fin.split()
- if len(fin) == 1:
- fin = glob.glob(fin[0])
- input_list = [ Dataset(i) for i in fin ]
- output_file = Dataset(fout, 'w', format="NETCDF4")
- copy_static(input_list[0], output_file)
- concat(input_list, output_file)
Add Comment
Please, Sign In to add comment