Search code examples
pythonnetcdf

copy netcdf file using python


I would like to make a copy of netcdf file using Python.

There are very nice examples of how to read or write netcdf-file, but perhaps there is also a good way how to make the input and then output of the variables to another file.

A good-simple method would be nice, in order to get the dimensions and dimension variables to the output file with the lowest cost.


Solution

  • I found the answer to this question at python netcdf: making a copy of all variables and attributes but one, but I needed to change it to work with my version of python/netCDF4 (Python 2.7.6/1.0.4). If you needed to add or subtract elements, you would make the appropriate modifications.

    import netCDF4 as nc
    
    def create_file_from_source(src_file, trg_file):
        src = nc.Dataset(src_file)
        trg = nc.Dataset(trg_file, mode='w')
    
        # Create the dimensions of the file
        for name, dim in src.dimensions.items():
            trg.createDimension(name, len(dim) if not dim.isunlimited() else None)
    
        # Copy the global attributes
        trg.setncatts({a:src.getncattr(a) for a in src.ncattrs()})
    
        # Create the variables in the file
        for name, var in src.variables.items():
            trg.createVariable(name, var.dtype, var.dimensions)
    
            # Copy the variable attributes
            trg.variables[name].setncatts({a:var.getncattr(a) for a in var.ncattrs()})
    
            # Copy the variables values (as 'f4' eventually)
            trg.variables[name][:] = src.variables[name][:]
    
        # Save the file
        trg.close()
    
    create_file_from_source('in.nc', 'out.nc')
    

    This snippet has been tested.