How to create a netCDF file with python netCDF4?

11,132

This works:

from netCDF4 import Dataset
import numpy as np

root_grp = Dataset('py_netcdf4.nc', 'w', format='NETCDF4')
root_grp.description = 'Example simulation data'

ndim = 128 # Size of the matrix ndim*ndim
xdimension = 0.75
ydimension = 0.75
# dimensions
root_grp.createDimension('time', None)
root_grp.createDimension('x', ndim)
root_grp.createDimension('y', ndim)

# variables
time = root_grp.createVariable('time', 'f8', ('time',))
x = root_grp.createVariable('x', 'f4', ('x',))
y = root_grp.createVariable('y', 'f4', ('y',))
field = root_grp.createVariable('field', 'f8', ('time', 'x', 'y',))

# data
x_range =  np.linspace(0, xdimension, ndim)
y_range =  np.linspace(0, ydimension, ndim)
x[:] = x_range
y[:] = y_range
for i in range(5):
    time[i] = i*50.0
    field[i,:,:] = np.random.uniform(size=(len(x_range), len(y_range)))


root_grp.close()

The only difference is that I call the close() method: root_grp.close().

Share:
11,132
Ohm
Author by

Ohm

Updated on June 27, 2022

Comments

  • Ohm
    Ohm about 2 years

    I am learning how to use netCDF4 using Python module in Anaconda. I am trying to append values to two variables I have created time and field:

    from netCDF4 import Dataset
    import numpy as np
    
    root_grp = Dataset('py_netcdf4.nc', 'w', format='NETCDF4')
    root_grp.description = 'Example simulation data'
    
    ndim = 128 # Size of the matrix ndim*ndim
    xdimension = 0.75
    ydimension = 0.75
    # dimensions
    root_grp.createDimension('time', None)
    root_grp.createDimension('x', ndim)
    root_grp.createDimension('y', ndim)
    
    # variables
    time = root_grp.createVariable('time', 'f8', ('time',))
    x = root_grp.createVariable('x', 'f4', ('x',))
    y = root_grp.createVariable('y', 'f4', ('y',))
    field = root_grp.createVariable('field', 'f8', ('time', 'x', 'y',))
    
    # data
    x_range =  np.linspace(0, xdimension, ndim)
    y_range =  np.linspace(0, ydimension, ndim)
    x[:] = x_range
    y[:] = y_range
    for i in range(5):
        time[i] = i*50.0
        field[i,:,:] = np.random.uniform(size=(len(x_range), len(y_range)))
    
    
    root_grp.close
    

    But now when I print one of the variables I get that it's empty(!!):

    Python 2.7.10 |Anaconda 2.4.1 (64-bit)| (default, Sep 15 2015, 14:50:01) 
    [GCC 4.4.7 20120313 (Red Hat 4.4.7-1)] on linux2
    Type "help", "copyright", "credits" or "license" for more information.
    Anaconda is brought to you by Continuum Analytics.
    Please check out: http://continuum.io/thanks and https://anaconda.org
    >>> from netCDF4 import Dataset
    >>> root_grp = Dataset('py_netcdf4.nc', 'r', format='NETCDF4')
    >>> print root_grp.variables["field"][:,:,:]
    []
    >>> 
    

    What am I doing wrong here?

  • j08lue
    j08lue about 8 years
    To avoid mistakes like that (e.g. missing brackets on close method), use the python with statement, like in this example.