PyNIO

module load python/2.7-ve0
ipython

Ipython listing

Read NetCDF files

   1 # load Nio module
   2 import Nio
   3 
   4 # open netcdf file
   5 f = Nio.open_file('sresa1b_ncar_ccsm3_0_run1_200001.nc', 'r') # 'r' stands for "read rights"
   6 
   7 # check contents
   8 print f
   9 
  10 # get dimensions
  11 dimNames = f.dimensions.keys()
  12 
  13 # get the size of dimension
  14 dimSize = f.dimensions['dimName']
  15 
  16 # read single variable:
  17 pr = f.variables['pr']
  18 print pr
  19 
  20 # read variables contents
  21 pr_data = pr[:]
  22 print pr_data
  23 
  24 # print slice of the variable data
  25 slice = pr_data[0,::-1,:]
  26 
  27 # close file
  28 f.close()

Create NetCDF file

   1 # create new file
   2 import Nio
   3 import numpy
   4 
   5 f = Nio.open_file('test.nc', 'w') # "w" stands for writing rights
   6 
   7 # create a dimension
   8 f.create_dimension('time',100)
   9 
  10 # create variable
  11 f.create_variable('temperature, 'i', ('time')) # dimension 'time' must be created prior to this step
  12 
  13 # Dimension types:
  14 #    'd': 64 bit float
  15 #    'f': 32 bit float
  16 #    'l': long
  17 #    'i': 32 bit integer
  18 #    'h': 16 bit integer
  19 #    'b': 8 bit integer
  20 #    'S1': character 
  21 
  22 # Create an attribute 
  23 f.variables['temperature'].units = "K"
  24 
  25 # Add scaling factor and an offset
  26 # when the variable will be read, it will need to be multiplied by the scale_factor first and the added to the offset value
  27 f.variables['temperature'].scale_factor = 0.1
  28 f.variables['temperature'].add_offset = 273
  29 
  30 # create variable contents and assign it to the NetCDF variable
  31 temp = numpy.arange(0,100,1, dtype = numpy.int32)
  32 f.variables['temperature'][:] = temp
  33 
  34 f.close()

Any netcdf file can be reopened later and new dimensions and variables can be added