Ralph
Ralph

Reputation: 11

No module named ncdump

So for the first time I am working with a NetCDF format and I need to use the ncdump command. I just downloaded Anaconda on my new laptop and used conda install netcdf4 to work with the NetCDF format. Why can't I use ncdump? Do I also need to install it or am I doing something else wrong? What I'm doing is:

import ncdump from ncdump 

Which gives the error:

No module named ncdump

Upvotes: 0

Views: 4433

Answers (1)

thaliaxen
thaliaxen

Reputation: 11

A friend helped me with this problem.... Copy the following code to a file named ncdump.py and put the file in the dir you run your python script.

from netCDF4 import Dataset
import glob

def ncdump(nc_fid, verb=True):
    '''
    ncdump outputs dimensions, variables and their attribute information.
    The information is similar to that of NCAR's ncdump utility.
    ncdump requires a valid instance of Dataset.

    Parameters
    ----------
    nc_fid : netCDF4.Dataset
        A netCDF4 dateset object
    verb : Boolean
        whether or not nc_attrs, nc_dims, and nc_vars are printed

    Returns
    -------
    nc_attrs : list
        A Python list of the NetCDF file global attributes
    nc_dims : list
        A Python list of the NetCDF file dimensions
    nc_vars : list
        A Python list of the NetCDF file variables
    '''
    def print_ncattr(key):
        """
        Prints the NetCDF file attributes for a given key

        Parameters
        ----------
        key : unicode
            a valid netCDF4.Dataset.variables key
        """
        try:
            print("\t\ttype:", repr(nc_fid.variables[key].dtype))
            for ncattr in nc_fid.variables[key].ncattrs():
                print('\t\t%s:' % ncattr,\
                      repr(nc_fid.variables[key].getncattr(ncattr)))
        except KeyError:
            print("\t\tWARNING: %s does not contain variable attributes" % key)

    # NetCDF global attributes
    nc_attrs = nc_fid.ncattrs()
    if verb:
        print ("NetCDF Global Attributes:")
        for nc_attr in nc_attrs:
            print('\t%s:' % nc_attr, repr(nc_fid.getncattr(nc_attr)))
    nc_dims = [dim for dim in nc_fid.dimensions]  # list of nc dimensions
    # Dimension shape information.
    if verb:
        print("NetCDF dimension information:")
        for dim in nc_dims:
            print("\tName:", dim)
            print("\t\tsize:", len(nc_fid.dimensions[dim]))
            print_ncattr(dim)
    # Variable information.
    nc_vars = [var for var in nc_fid.variables]  # list of nc variables
    if verb:
        print("NetCDF variable information:")
        for var in nc_vars:
            if var not in nc_dims:
                print('\tName:', var)
                print("\t\tdimensions:", nc_fid.variables[var].dimensions)
                print("\t\tsize:", nc_fid.variables[var].size)
                print_ncattr(var)
    return nc_attrs, nc_dims, nc_vars

import sys
import os
import fileinput


ncfiles = list(glob.glob('W:/kimberley/Vectors' + '/*.nc'))
for ifile in range(len(ncfiles)):
            sfile = Dataset(ncfiles[ifile],mode='r', format='NETCDF4')
            base, extension = os.path.splitext(ncfiles[ifile])
            output =  base + '_readme.txt'
            f = open(output, 'w')
            sys.stdout = f
            ncdump(sfile)
            f.close()
orig_stdout = sys.stdout

Now in your code you can write: import ncdump from ncdump

It will work!

Upvotes: 1

Related Questions