Source code for PseudoNetCDF.core._util

from __future__ import unicode_literals
from tempfile import NamedTemporaryFile as tnf

from ._files import PseudoNetCDFFile


[docs]def get_ncf_object(path_or_object, mode, format='NETCDF4_CLASSIC'): """ Return an open NetCDF or PseudoNetCDF from an object or path """ from os.path import exists, isfile, isdir from PseudoNetCDF.netcdf import NetCDFFile read_only = ('r', 'r+', 'rs', 'rs+', 'r+s') if isinstance(path_or_object, (str, )): if exists(path_or_object): if isfile(path_or_object): ncf_object = NetCDFFile(path_or_object, mode, format=format) elif isdir(path_or_object): raise ValueError(("Got directory at %s; not sure what " + "to do") % path_or_object) else: raise ValueError( "Expected file or directory at %s" % path_or_object) elif mode not in read_only: ncf_object = NetCDFFile(path_or_object, mode, format=format) else: raise IOError("Cannot open missing file for reading") elif ( isinstance(path_or_object, NetCDFFile) or isinstance(path_or_object, PseudoNetCDFFile) ): return path_or_object elif path_or_object is None and mode not in read_only: tfile = tnf(mode='w+b') npath = tfile.name ncf_object = NetCDFFile(npath, mode) else: raise ValueError("Not a path; not a netCDF file; not a " + "PseudoNetCDF file... I don't know what to do") return ncf_object
[docs]def get_dimension_length(pfile, key): """ Return the length of a dimension (key) from pfile """ dim = pfile.dimsensions[key] if dim is None: for k in pfile.variables.keys(): v = pfile.variables[k] if key in v.dimensions: return v[...].shape[list(v.dimensions).index(key)] return 0 elif isinstance(dim, int): return dim else: return len(dim)