Source code for coilpy.netcdf
import os # for path.abspath
import keyword # for getting python keywords
from scipy.io import netcdf_file
import numpy as np
[docs]class Netcdf(object):
"""Assembly datasets in a netcdf file into python classes.
It takes the same arguments as scipy.io.netcdf.netcdf_file.
Once parsed, you can access all the data directly via its key as class attributes.
Examples
-------
Read a netcdf file:
data = Netcdf('path-to-file.nc')
Access its attributes:
data.key
List all the keys:
print(list(data))
"""
def __init__(self, filename, mmap=False, version=1, maskandscale=False):
try:
f = netcdf_file(
filename,
mode="r",
mmap=mmap,
version=version,
maskandscale=maskandscale,
)
for key in f.variables.keys():
if (
key in keyword.kwlist
): # add underscore avoiding assigning python keywords
setattr(self, key + "_", f.variables[key][()])
else:
setattr(self, key, f.variables[key][()])
f.close()
except TypeError:
from netCDF4 import Dataset
print("use the netcdf4 package, instead of scipy.io")
f = Dataset(filename, "r")
for key in f.variables.keys():
if (
key in keyword.kwlist
): # add underscore avoiding assigning python keywords
setattr(self, key + "_", np.array(f.variables[key][()]))
else:
setattr(self, key, np.array(f.variables[key][()]))
f.close()
except:
print("Filename has to be the full name to the Netcdf file.")
self.filename = os.path.abspath(filename)
return
# needed for iterating over the contents of the file
def __iter__(self):
return iter(self.__dict__)
def __next__(self):
return next(self.__dict__)
def __enter__(self):
return self
def __exit__(self, t, v, tb):
return