scripts/hd5splitter.py (69 lines of code) (raw):

# Licensed to the Apache Software Foundation (ASF) under one or more # contributor license agreements. See the NOTICE file distributed with # this work for additional information regarding copyright ownership. # The ASF licenses this file to You under the Apache License, Version 2.0 # (the "License"); you may not use this file except in compliance with # the License. You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. def hd5_copy(source, dest): for key in source.keys(): source.copy('/' + key, dest['/'], name=key) print(key) if str(key) == 'time': dest[key + '_c'] = dest[key][0:4] elif str(key) == 'longitude': dest[key + '_c'] = dest[key][0:87] elif str(key) == 'latitude': dest[key + '_c'] = dest[key][0:38] else: dest[key + '_c'] = dest[key][0:4, 0:38, 0:87] # Useful for swath data: # if dest[key].ndim == 2: # dest[key + '_c'] = dest[key][0:76, 181:183] # elif dest[key].ndim == 3: # dest[key + '_c'] = dest[key][0:76, 181:183, :] # elif dest[key].ndim == 1: # dest[key + '_c'] = dest[key][181:183] for att in dest[key + '_c'].attrs: try: dest[key + '_c'].attrs.modify(dest[key].attrs.get(att, default="")) except IOError: print("error " + att) pass dest[key + '_c'].attrs.update(dest[key].attrs) del dest[key] dest[key] = dest[key + '_c'] del dest[key + '_c'] print(dest[key]) for att in dest.attrs: try: dest.attrs.modify(source.attrs.get(att, default="")) except IOError: print("error " + att) pass # dest.attrs.update(source.attrs) dest.flush() def netcdf_subset(source, dest): dtime = dest.createDimension(dimname=TIME, size=TIME_SLICE.stop - TIME_SLICE.start) # dlat = dest.createDimension(dimname=LATITUDE, size=LATITUDE_SLICE.stop - LATITUDE_SLICE.start) # dlon = dest.createDimension(dimname=LONGITUDE, size=LONGITUDE_SLICE.stop - LONGITUDE_SLICE.start) drivid = dest.createDimension(dimname='rivid', size=LONGITUDE_SLICE.stop - LONGITUDE_SLICE.start) dest.setncatts(source.__dict__) for variable in [v for v in source.variables if v in ['Qout', TIME, LONGITUDE, LATITUDE]]: variable = source[variable] if variable.name == TIME: dvar = dest.createVariable(varname=variable.name, datatype=variable.dtype, dimensions=(dtime.name,)) dest[variable.name].setncatts(variable.__dict__) dvar[:] = variable[TIME_SLICE] elif variable.name == LONGITUDE: dvar = dest.createVariable(varname=variable.name, datatype=variable.dtype, dimensions=(drivid.name,)) dest[variable.name].setncatts(variable.__dict__) dvar[:] = variable[LONGITUDE_SLICE] elif variable.name == LATITUDE: dvar = dest.createVariable(varname=variable.name, datatype=variable.dtype, dimensions=(drivid.name,)) dest[variable.name].setncatts(variable.__dict__) dvar[:] = variable[LATITUDE_SLICE] else: dvar = dest.createVariable(varname=variable.name, datatype=variable.dtype, dimensions=(dtime.name, drivid.name)) dest[variable.name].setncatts(variable.__dict__) dvar[:] = variable[TIME_SLICE, LONGITUDE_SLICE] dest.sync() dest.close() from netCDF4 import Dataset LATITUDE = 'lat' LATITUDE_SLICE = slice(0, 1000) LONGITUDE = 'lon' LONGITUDE_SLICE = slice(0, 1000) TIME = 'time' TIME_SLICE = slice(0, 1) hinput = Dataset( '/Users/greguska/data/swot_example/latest/Qout_WSWM_729days_p0_dtR900s_n1_preonly_20160416.nc', 'r') houtput = Dataset( '/Users/greguska/data/swot_example/latest/Qout_WSWM_729days_p0_dtR900s_n1_preonly_20160416.split.nc', mode='w') netcdf_subset(hinput, houtput) # # from h5py import File, Dataset # hinput = File( # '/Users/greguska/githubprojects/nexus/nexus-ingest/developer-box/data/ccmp/CCMP_Wind_Analysis_20160101_V02.0_L3.0_RSS.nc', # 'r') # houput = File( # '/Users/greguska/githubprojects/nexus/nexus-ingest/developer-box/data/ccmp/CCMP_Wind_Analysis_20160101_V02.0_L3.0_RSS.split.nc', # 'w') # hd5_copy(hinput, houput) # print hinput['/'] # print houtput['/'] # print [attr for attr in hinput.attrs] # print [attr for attr in houtput.attrs] # hinput.close() # houtput.close()