{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# xncml usage\n", "\n", "xncml serves two purposes: modifying NcML files, and opening NcML files as an `xarray.Dataset`. " ] }, { "cell_type": "code", "execution_count": 1, "metadata": { "is_executing": true }, "outputs": [], "source": [ "import xncml\n", "from pathlib import Path\n", "from IPython.display import Code" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Modify an NcML document\n", "\n", "``xncml`` can add or remove global and variable attributes, and remove variables and dimensions. It can also be used to create NcML files from scratch. This is all done using the `xncml.Dataset` class and its methods.\n", "\n", "### Create an Ncml Dataset object from a local NcML file\n", "\n", "The `xncml.Dataset` class is instantiated by passing the NcML file location. Alternatively, the class can be created using its `from_text` classmethod." ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
<?xml version="1.0" encoding="utf-8"?>\n",
       "<netcdf location="nc/example1.nc" xmlns="http://www.unidata.ucar.edu/namespaces/netcdf/ncml-2.2">\n",
       "\t<dimension name="time" length="2" isUnlimited="true"></dimension>\n",
       "\t<dimension name="lat" length="3"></dimension>\n",
       "\t<dimension name="lon" length="4"></dimension>\n",
       "\t<attribute name="title" type="String" value="Example Data"></attribute>\n",
       "\t<variable name="rh" shape="time lat lon" type="int">\n",
       "\t\t<attribute name="long_name" type="String" value="relative humidity"></attribute>\n",
       "\t\t<attribute name="units" type="String" value="percent"></attribute>\n",
       "\t</variable>\n",
       "\t<variable name="T" shape="time lat lon" type="double">\n",
       "\t\t<attribute name="long_name" type="String" value="surface temperature"></attribute>\n",
       "\t\t<attribute name="units" type="String" value="C"></attribute>\n",
       "\t</variable>\n",
       "\t<variable name="lat" shape="lat" type="float">\n",
       "\t\t<attribute name="units" type="String" value="degrees_north"></attribute>\n",
       "\t\t<values>41.0 40.0 39.0</values>\n",
       "\t</variable>\n",
       "\t<variable name="lon" shape="lon" type="float">\n",
       "\t\t<attribute name="units" type="String" value="degrees_east"></attribute>\n",
       "\t\t<values>-109.0 -107.0 -105.0 -103.0</values>\n",
       "\t</variable>\n",
       "\t<variable name="time" shape="time" type="int">\n",
       "\t\t<attribute name="units" type="String" value="hours"></attribute>\n",
       "\t\t<values>6 18</values>\n",
       "\t</variable>\n",
       "</netcdf>\n",
       "
\n" ], "text/latex": [ "\\begin{Verbatim}[commandchars=\\\\\\{\\}]\n", "\\PY{c+cp}{\\PYZlt{}?xml version=\\PYZdq{}1.0\\PYZdq{} encoding=\\PYZdq{}utf\\PYZhy{}8\\PYZdq{}?\\PYZgt{}}\n", "\\PY{n+nt}{\\PYZlt{}netcdf} \\PY{n+na}{location=}\\PY{l+s}{\\PYZdq{}nc/example1.nc\\PYZdq{}} \\PY{n+na}{xmlns=}\\PY{l+s}{\\PYZdq{}http://www.unidata.ucar.edu/namespaces/netcdf/ncml\\PYZhy{}2.2\\PYZdq{}}\\PY{n+nt}{\\PYZgt{}}\n", "\t\\PY{n+nt}{\\PYZlt{}dimension} \\PY{n+na}{name=}\\PY{l+s}{\\PYZdq{}time\\PYZdq{}} \\PY{n+na}{length=}\\PY{l+s}{\\PYZdq{}2\\PYZdq{}} \\PY{n+na}{isUnlimited=}\\PY{l+s}{\\PYZdq{}true\\PYZdq{}}\\PY{n+nt}{\\PYZgt{}}\\PY{n+nt}{\\PYZlt{}/dimension\\PYZgt{}}\n", "\t\\PY{n+nt}{\\PYZlt{}dimension} \\PY{n+na}{name=}\\PY{l+s}{\\PYZdq{}lat\\PYZdq{}} \\PY{n+na}{length=}\\PY{l+s}{\\PYZdq{}3\\PYZdq{}}\\PY{n+nt}{\\PYZgt{}}\\PY{n+nt}{\\PYZlt{}/dimension\\PYZgt{}}\n", "\t\\PY{n+nt}{\\PYZlt{}dimension} \\PY{n+na}{name=}\\PY{l+s}{\\PYZdq{}lon\\PYZdq{}} \\PY{n+na}{length=}\\PY{l+s}{\\PYZdq{}4\\PYZdq{}}\\PY{n+nt}{\\PYZgt{}}\\PY{n+nt}{\\PYZlt{}/dimension\\PYZgt{}}\n", "\t\\PY{n+nt}{\\PYZlt{}attribute} \\PY{n+na}{name=}\\PY{l+s}{\\PYZdq{}title\\PYZdq{}} \\PY{n+na}{type=}\\PY{l+s}{\\PYZdq{}String\\PYZdq{}} \\PY{n+na}{value=}\\PY{l+s}{\\PYZdq{}Example Data\\PYZdq{}}\\PY{n+nt}{\\PYZgt{}}\\PY{n+nt}{\\PYZlt{}/attribute\\PYZgt{}}\n", "\t\\PY{n+nt}{\\PYZlt{}variable} \\PY{n+na}{name=}\\PY{l+s}{\\PYZdq{}rh\\PYZdq{}} \\PY{n+na}{shape=}\\PY{l+s}{\\PYZdq{}time lat lon\\PYZdq{}} \\PY{n+na}{type=}\\PY{l+s}{\\PYZdq{}int\\PYZdq{}}\\PY{n+nt}{\\PYZgt{}}\n", "\t\t\\PY{n+nt}{\\PYZlt{}attribute} \\PY{n+na}{name=}\\PY{l+s}{\\PYZdq{}long\\PYZus{}name\\PYZdq{}} \\PY{n+na}{type=}\\PY{l+s}{\\PYZdq{}String\\PYZdq{}} \\PY{n+na}{value=}\\PY{l+s}{\\PYZdq{}relative humidity\\PYZdq{}}\\PY{n+nt}{\\PYZgt{}}\\PY{n+nt}{\\PYZlt{}/attribute\\PYZgt{}}\n", "\t\t\\PY{n+nt}{\\PYZlt{}attribute} \\PY{n+na}{name=}\\PY{l+s}{\\PYZdq{}units\\PYZdq{}} \\PY{n+na}{type=}\\PY{l+s}{\\PYZdq{}String\\PYZdq{}} \\PY{n+na}{value=}\\PY{l+s}{\\PYZdq{}percent\\PYZdq{}}\\PY{n+nt}{\\PYZgt{}}\\PY{n+nt}{\\PYZlt{}/attribute\\PYZgt{}}\n", "\t\\PY{n+nt}{\\PYZlt{}/variable\\PYZgt{}}\n", "\t\\PY{n+nt}{\\PYZlt{}variable} \\PY{n+na}{name=}\\PY{l+s}{\\PYZdq{}T\\PYZdq{}} \\PY{n+na}{shape=}\\PY{l+s}{\\PYZdq{}time lat lon\\PYZdq{}} \\PY{n+na}{type=}\\PY{l+s}{\\PYZdq{}double\\PYZdq{}}\\PY{n+nt}{\\PYZgt{}}\n", "\t\t\\PY{n+nt}{\\PYZlt{}attribute} \\PY{n+na}{name=}\\PY{l+s}{\\PYZdq{}long\\PYZus{}name\\PYZdq{}} \\PY{n+na}{type=}\\PY{l+s}{\\PYZdq{}String\\PYZdq{}} \\PY{n+na}{value=}\\PY{l+s}{\\PYZdq{}surface temperature\\PYZdq{}}\\PY{n+nt}{\\PYZgt{}}\\PY{n+nt}{\\PYZlt{}/attribute\\PYZgt{}}\n", "\t\t\\PY{n+nt}{\\PYZlt{}attribute} \\PY{n+na}{name=}\\PY{l+s}{\\PYZdq{}units\\PYZdq{}} \\PY{n+na}{type=}\\PY{l+s}{\\PYZdq{}String\\PYZdq{}} \\PY{n+na}{value=}\\PY{l+s}{\\PYZdq{}C\\PYZdq{}}\\PY{n+nt}{\\PYZgt{}}\\PY{n+nt}{\\PYZlt{}/attribute\\PYZgt{}}\n", "\t\\PY{n+nt}{\\PYZlt{}/variable\\PYZgt{}}\n", "\t\\PY{n+nt}{\\PYZlt{}variable} \\PY{n+na}{name=}\\PY{l+s}{\\PYZdq{}lat\\PYZdq{}} \\PY{n+na}{shape=}\\PY{l+s}{\\PYZdq{}lat\\PYZdq{}} \\PY{n+na}{type=}\\PY{l+s}{\\PYZdq{}float\\PYZdq{}}\\PY{n+nt}{\\PYZgt{}}\n", "\t\t\\PY{n+nt}{\\PYZlt{}attribute} \\PY{n+na}{name=}\\PY{l+s}{\\PYZdq{}units\\PYZdq{}} \\PY{n+na}{type=}\\PY{l+s}{\\PYZdq{}String\\PYZdq{}} \\PY{n+na}{value=}\\PY{l+s}{\\PYZdq{}degrees\\PYZus{}north\\PYZdq{}}\\PY{n+nt}{\\PYZgt{}}\\PY{n+nt}{\\PYZlt{}/attribute\\PYZgt{}}\n", "\t\t\\PY{n+nt}{\\PYZlt{}values}\\PY{n+nt}{\\PYZgt{}}41.0 40.0 39.0\\PY{n+nt}{\\PYZlt{}/values\\PYZgt{}}\n", "\t\\PY{n+nt}{\\PYZlt{}/variable\\PYZgt{}}\n", "\t\\PY{n+nt}{\\PYZlt{}variable} \\PY{n+na}{name=}\\PY{l+s}{\\PYZdq{}lon\\PYZdq{}} \\PY{n+na}{shape=}\\PY{l+s}{\\PYZdq{}lon\\PYZdq{}} \\PY{n+na}{type=}\\PY{l+s}{\\PYZdq{}float\\PYZdq{}}\\PY{n+nt}{\\PYZgt{}}\n", "\t\t\\PY{n+nt}{\\PYZlt{}attribute} \\PY{n+na}{name=}\\PY{l+s}{\\PYZdq{}units\\PYZdq{}} \\PY{n+na}{type=}\\PY{l+s}{\\PYZdq{}String\\PYZdq{}} \\PY{n+na}{value=}\\PY{l+s}{\\PYZdq{}degrees\\PYZus{}east\\PYZdq{}}\\PY{n+nt}{\\PYZgt{}}\\PY{n+nt}{\\PYZlt{}/attribute\\PYZgt{}}\n", "\t\t\\PY{n+nt}{\\PYZlt{}values}\\PY{n+nt}{\\PYZgt{}}\\PYZhy{}109.0 \\PYZhy{}107.0 \\PYZhy{}105.0 \\PYZhy{}103.0\\PY{n+nt}{\\PYZlt{}/values\\PYZgt{}}\n", "\t\\PY{n+nt}{\\PYZlt{}/variable\\PYZgt{}}\n", "\t\\PY{n+nt}{\\PYZlt{}variable} \\PY{n+na}{name=}\\PY{l+s}{\\PYZdq{}time\\PYZdq{}} \\PY{n+na}{shape=}\\PY{l+s}{\\PYZdq{}time\\PYZdq{}} \\PY{n+na}{type=}\\PY{l+s}{\\PYZdq{}int\\PYZdq{}}\\PY{n+nt}{\\PYZgt{}}\n", "\t\t\\PY{n+nt}{\\PYZlt{}attribute} \\PY{n+na}{name=}\\PY{l+s}{\\PYZdq{}units\\PYZdq{}} \\PY{n+na}{type=}\\PY{l+s}{\\PYZdq{}String\\PYZdq{}} \\PY{n+na}{value=}\\PY{l+s}{\\PYZdq{}hours\\PYZdq{}}\\PY{n+nt}{\\PYZgt{}}\\PY{n+nt}{\\PYZlt{}/attribute\\PYZgt{}}\n", "\t\t\\PY{n+nt}{\\PYZlt{}values}\\PY{n+nt}{\\PYZgt{}}6 18\\PY{n+nt}{\\PYZlt{}/values\\PYZgt{}}\n", "\t\\PY{n+nt}{\\PYZlt{}/variable\\PYZgt{}}\n", "\\PY{n+nt}{\\PYZlt{}/netcdf\\PYZgt{}}\n", "\\end{Verbatim}\n" ], "text/plain": [ "\n", "\n", "\t\n", "\t\n", "\t\n", "\t\n", "\t\n", "\t\t\n", "\t\t\n", "\t\n", "\t\n", "\t\t\n", "\t\t\n", "\t\n", "\t\n", "\t\t\n", "\t\t41.0 40.0 39.0\n", "\t\n", "\t\n", "\t\t\n", "\t\t-109.0 -107.0 -105.0 -103.0\n", "\t\n", "\t\n", "\t\t\n", "\t\t6 18\n", "\t\n", "" ] }, "execution_count": 2, "metadata": {}, "output_type": "execute_result" } ], "source": [ "fn = Path(xncml.__file__).parent.parent / \"tests\" / \"data\" / \"exercise1.ncml\"\n", "\n", "# Instantiate Dataset class from the file location. An alternative would have been to do\n", "# nc = xncml.Dataset.from_text(fn.read_text())\n", "nc = xncml.Dataset(fn)\n", "\n", "\n", "# This is just to pretty print the XML\n", "Code(repr(nc), language=\"XML\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Create an NcML Dataset modifying a netCDF file\n", "\n", "Here we're creating an empty NcML dataset from scratch, in which we can include modifying statements that will apply to an existing netCDF dataset identified by the `location` argument." ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
<?xml version="1.0" encoding="utf-8"?>\n",
       "<netcdf xmlns="http://www.unidata.ucar.edu/namespaces/netcdf/ncml-2.2" location="nc/example1.nc"></netcdf>\n",
       "
\n" ], "text/latex": [ "\\begin{Verbatim}[commandchars=\\\\\\{\\}]\n", "\\PY{c+cp}{\\PYZlt{}?xml version=\\PYZdq{}1.0\\PYZdq{} encoding=\\PYZdq{}utf\\PYZhy{}8\\PYZdq{}?\\PYZgt{}}\n", "\\PY{n+nt}{\\PYZlt{}netcdf} \\PY{n+na}{xmlns=}\\PY{l+s}{\\PYZdq{}http://www.unidata.ucar.edu/namespaces/netcdf/ncml\\PYZhy{}2.2\\PYZdq{}} \\PY{n+na}{location=}\\PY{l+s}{\\PYZdq{}nc/example1.nc\\PYZdq{}}\\PY{n+nt}{\\PYZgt{}}\\PY{n+nt}{\\PYZlt{}/netcdf\\PYZgt{}}\n", "\\end{Verbatim}\n" ], "text/plain": [ "\n", "" ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" } ], "source": [ "new = xncml.Dataset(location=\"nc/example1.nc\")\n", "Code(repr(new), language=\"XML\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Rename the variable `T` to `Temp`" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
<?xml version="1.0" encoding="utf-8"?>\n",
       "<netcdf location="nc/example1.nc" xmlns="http://www.unidata.ucar.edu/namespaces/netcdf/ncml-2.2">\n",
       "\t<dimension name="time" length="2" isUnlimited="true"></dimension>\n",
       "\t<dimension name="lat" length="3"></dimension>\n",
       "\t<dimension name="lon" length="4"></dimension>\n",
       "\t<attribute name="title" type="String" value="Example Data"></attribute>\n",
       "\t<variable name="rh" shape="time lat lon" type="int">\n",
       "\t\t<attribute name="long_name" type="String" value="relative humidity"></attribute>\n",
       "\t\t<attribute name="units" type="String" value="percent"></attribute>\n",
       "\t</variable>\n",
       "\t<variable name="Temp" shape="time lat lon" type="double" orgName="T">\n",
       "\t\t<attribute name="long_name" type="String" value="surface temperature"></attribute>\n",
       "\t\t<attribute name="units" type="String" value="C"></attribute>\n",
       "\t</variable>\n",
       "\t<variable name="lat" shape="lat" type="float">\n",
       "\t\t<attribute name="units" type="String" value="degrees_north"></attribute>\n",
       "\t\t<values>41.0 40.0 39.0</values>\n",
       "\t</variable>\n",
       "\t<variable name="lon" shape="lon" type="float">\n",
       "\t\t<attribute name="units" type="String" value="degrees_east"></attribute>\n",
       "\t\t<values>-109.0 -107.0 -105.0 -103.0</values>\n",
       "\t</variable>\n",
       "\t<variable name="time" shape="time" type="int">\n",
       "\t\t<attribute name="units" type="String" value="hours"></attribute>\n",
       "\t\t<values>6 18</values>\n",
       "\t</variable>\n",
       "</netcdf>\n",
       "
\n" ], "text/latex": [ "\\begin{Verbatim}[commandchars=\\\\\\{\\}]\n", "\\PY{c+cp}{\\PYZlt{}?xml version=\\PYZdq{}1.0\\PYZdq{} encoding=\\PYZdq{}utf\\PYZhy{}8\\PYZdq{}?\\PYZgt{}}\n", "\\PY{n+nt}{\\PYZlt{}netcdf} \\PY{n+na}{location=}\\PY{l+s}{\\PYZdq{}nc/example1.nc\\PYZdq{}} \\PY{n+na}{xmlns=}\\PY{l+s}{\\PYZdq{}http://www.unidata.ucar.edu/namespaces/netcdf/ncml\\PYZhy{}2.2\\PYZdq{}}\\PY{n+nt}{\\PYZgt{}}\n", "\t\\PY{n+nt}{\\PYZlt{}dimension} \\PY{n+na}{name=}\\PY{l+s}{\\PYZdq{}time\\PYZdq{}} \\PY{n+na}{length=}\\PY{l+s}{\\PYZdq{}2\\PYZdq{}} \\PY{n+na}{isUnlimited=}\\PY{l+s}{\\PYZdq{}true\\PYZdq{}}\\PY{n+nt}{\\PYZgt{}}\\PY{n+nt}{\\PYZlt{}/dimension\\PYZgt{}}\n", "\t\\PY{n+nt}{\\PYZlt{}dimension} \\PY{n+na}{name=}\\PY{l+s}{\\PYZdq{}lat\\PYZdq{}} \\PY{n+na}{length=}\\PY{l+s}{\\PYZdq{}3\\PYZdq{}}\\PY{n+nt}{\\PYZgt{}}\\PY{n+nt}{\\PYZlt{}/dimension\\PYZgt{}}\n", "\t\\PY{n+nt}{\\PYZlt{}dimension} \\PY{n+na}{name=}\\PY{l+s}{\\PYZdq{}lon\\PYZdq{}} \\PY{n+na}{length=}\\PY{l+s}{\\PYZdq{}4\\PYZdq{}}\\PY{n+nt}{\\PYZgt{}}\\PY{n+nt}{\\PYZlt{}/dimension\\PYZgt{}}\n", "\t\\PY{n+nt}{\\PYZlt{}attribute} \\PY{n+na}{name=}\\PY{l+s}{\\PYZdq{}title\\PYZdq{}} \\PY{n+na}{type=}\\PY{l+s}{\\PYZdq{}String\\PYZdq{}} \\PY{n+na}{value=}\\PY{l+s}{\\PYZdq{}Example Data\\PYZdq{}}\\PY{n+nt}{\\PYZgt{}}\\PY{n+nt}{\\PYZlt{}/attribute\\PYZgt{}}\n", "\t\\PY{n+nt}{\\PYZlt{}variable} \\PY{n+na}{name=}\\PY{l+s}{\\PYZdq{}rh\\PYZdq{}} \\PY{n+na}{shape=}\\PY{l+s}{\\PYZdq{}time lat lon\\PYZdq{}} \\PY{n+na}{type=}\\PY{l+s}{\\PYZdq{}int\\PYZdq{}}\\PY{n+nt}{\\PYZgt{}}\n", "\t\t\\PY{n+nt}{\\PYZlt{}attribute} \\PY{n+na}{name=}\\PY{l+s}{\\PYZdq{}long\\PYZus{}name\\PYZdq{}} \\PY{n+na}{type=}\\PY{l+s}{\\PYZdq{}String\\PYZdq{}} \\PY{n+na}{value=}\\PY{l+s}{\\PYZdq{}relative humidity\\PYZdq{}}\\PY{n+nt}{\\PYZgt{}}\\PY{n+nt}{\\PYZlt{}/attribute\\PYZgt{}}\n", "\t\t\\PY{n+nt}{\\PYZlt{}attribute} \\PY{n+na}{name=}\\PY{l+s}{\\PYZdq{}units\\PYZdq{}} \\PY{n+na}{type=}\\PY{l+s}{\\PYZdq{}String\\PYZdq{}} \\PY{n+na}{value=}\\PY{l+s}{\\PYZdq{}percent\\PYZdq{}}\\PY{n+nt}{\\PYZgt{}}\\PY{n+nt}{\\PYZlt{}/attribute\\PYZgt{}}\n", "\t\\PY{n+nt}{\\PYZlt{}/variable\\PYZgt{}}\n", "\t\\PY{n+nt}{\\PYZlt{}variable} \\PY{n+na}{name=}\\PY{l+s}{\\PYZdq{}Temp\\PYZdq{}} \\PY{n+na}{shape=}\\PY{l+s}{\\PYZdq{}time lat lon\\PYZdq{}} \\PY{n+na}{type=}\\PY{l+s}{\\PYZdq{}double\\PYZdq{}} \\PY{n+na}{orgName=}\\PY{l+s}{\\PYZdq{}T\\PYZdq{}}\\PY{n+nt}{\\PYZgt{}}\n", "\t\t\\PY{n+nt}{\\PYZlt{}attribute} \\PY{n+na}{name=}\\PY{l+s}{\\PYZdq{}long\\PYZus{}name\\PYZdq{}} \\PY{n+na}{type=}\\PY{l+s}{\\PYZdq{}String\\PYZdq{}} \\PY{n+na}{value=}\\PY{l+s}{\\PYZdq{}surface temperature\\PYZdq{}}\\PY{n+nt}{\\PYZgt{}}\\PY{n+nt}{\\PYZlt{}/attribute\\PYZgt{}}\n", "\t\t\\PY{n+nt}{\\PYZlt{}attribute} \\PY{n+na}{name=}\\PY{l+s}{\\PYZdq{}units\\PYZdq{}} \\PY{n+na}{type=}\\PY{l+s}{\\PYZdq{}String\\PYZdq{}} \\PY{n+na}{value=}\\PY{l+s}{\\PYZdq{}C\\PYZdq{}}\\PY{n+nt}{\\PYZgt{}}\\PY{n+nt}{\\PYZlt{}/attribute\\PYZgt{}}\n", "\t\\PY{n+nt}{\\PYZlt{}/variable\\PYZgt{}}\n", "\t\\PY{n+nt}{\\PYZlt{}variable} \\PY{n+na}{name=}\\PY{l+s}{\\PYZdq{}lat\\PYZdq{}} \\PY{n+na}{shape=}\\PY{l+s}{\\PYZdq{}lat\\PYZdq{}} \\PY{n+na}{type=}\\PY{l+s}{\\PYZdq{}float\\PYZdq{}}\\PY{n+nt}{\\PYZgt{}}\n", "\t\t\\PY{n+nt}{\\PYZlt{}attribute} \\PY{n+na}{name=}\\PY{l+s}{\\PYZdq{}units\\PYZdq{}} \\PY{n+na}{type=}\\PY{l+s}{\\PYZdq{}String\\PYZdq{}} \\PY{n+na}{value=}\\PY{l+s}{\\PYZdq{}degrees\\PYZus{}north\\PYZdq{}}\\PY{n+nt}{\\PYZgt{}}\\PY{n+nt}{\\PYZlt{}/attribute\\PYZgt{}}\n", "\t\t\\PY{n+nt}{\\PYZlt{}values}\\PY{n+nt}{\\PYZgt{}}41.0 40.0 39.0\\PY{n+nt}{\\PYZlt{}/values\\PYZgt{}}\n", "\t\\PY{n+nt}{\\PYZlt{}/variable\\PYZgt{}}\n", "\t\\PY{n+nt}{\\PYZlt{}variable} \\PY{n+na}{name=}\\PY{l+s}{\\PYZdq{}lon\\PYZdq{}} \\PY{n+na}{shape=}\\PY{l+s}{\\PYZdq{}lon\\PYZdq{}} \\PY{n+na}{type=}\\PY{l+s}{\\PYZdq{}float\\PYZdq{}}\\PY{n+nt}{\\PYZgt{}}\n", "\t\t\\PY{n+nt}{\\PYZlt{}attribute} \\PY{n+na}{name=}\\PY{l+s}{\\PYZdq{}units\\PYZdq{}} \\PY{n+na}{type=}\\PY{l+s}{\\PYZdq{}String\\PYZdq{}} \\PY{n+na}{value=}\\PY{l+s}{\\PYZdq{}degrees\\PYZus{}east\\PYZdq{}}\\PY{n+nt}{\\PYZgt{}}\\PY{n+nt}{\\PYZlt{}/attribute\\PYZgt{}}\n", "\t\t\\PY{n+nt}{\\PYZlt{}values}\\PY{n+nt}{\\PYZgt{}}\\PYZhy{}109.0 \\PYZhy{}107.0 \\PYZhy{}105.0 \\PYZhy{}103.0\\PY{n+nt}{\\PYZlt{}/values\\PYZgt{}}\n", "\t\\PY{n+nt}{\\PYZlt{}/variable\\PYZgt{}}\n", "\t\\PY{n+nt}{\\PYZlt{}variable} \\PY{n+na}{name=}\\PY{l+s}{\\PYZdq{}time\\PYZdq{}} \\PY{n+na}{shape=}\\PY{l+s}{\\PYZdq{}time\\PYZdq{}} \\PY{n+na}{type=}\\PY{l+s}{\\PYZdq{}int\\PYZdq{}}\\PY{n+nt}{\\PYZgt{}}\n", "\t\t\\PY{n+nt}{\\PYZlt{}attribute} \\PY{n+na}{name=}\\PY{l+s}{\\PYZdq{}units\\PYZdq{}} \\PY{n+na}{type=}\\PY{l+s}{\\PYZdq{}String\\PYZdq{}} \\PY{n+na}{value=}\\PY{l+s}{\\PYZdq{}hours\\PYZdq{}}\\PY{n+nt}{\\PYZgt{}}\\PY{n+nt}{\\PYZlt{}/attribute\\PYZgt{}}\n", "\t\t\\PY{n+nt}{\\PYZlt{}values}\\PY{n+nt}{\\PYZgt{}}6 18\\PY{n+nt}{\\PYZlt{}/values\\PYZgt{}}\n", "\t\\PY{n+nt}{\\PYZlt{}/variable\\PYZgt{}}\n", "\\PY{n+nt}{\\PYZlt{}/netcdf\\PYZgt{}}\n", "\\end{Verbatim}\n" ], "text/plain": [ "\n", "\n", "\t\n", "\t\n", "\t\n", "\t\n", "\t\n", "\t\t\n", "\t\t\n", "\t\n", "\t\n", "\t\t\n", "\t\t\n", "\t\n", "\t\n", "\t\t\n", "\t\t41.0 40.0 39.0\n", "\t\n", "\t\n", "\t\t\n", "\t\t-109.0 -107.0 -105.0 -103.0\n", "\t\n", "\t\n", "\t\t\n", "\t\t6 18\n", "\t\n", "" ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "nc.rename_variable('T', 'Temp')\n", "Code(repr(nc), language=\"XML\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Remove the variable `Temp` from the dataset" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
<?xml version="1.0" encoding="utf-8"?>\n",
       "<netcdf location="nc/example1.nc" xmlns="http://www.unidata.ucar.edu/namespaces/netcdf/ncml-2.2">\n",
       "\t<dimension name="time" length="2" isUnlimited="true"></dimension>\n",
       "\t<dimension name="lat" length="3"></dimension>\n",
       "\t<dimension name="lon" length="4"></dimension>\n",
       "\t<attribute name="title" type="String" value="Example Data"></attribute>\n",
       "\t<variable name="rh" shape="time lat lon" type="int">\n",
       "\t\t<attribute name="long_name" type="String" value="relative humidity"></attribute>\n",
       "\t\t<attribute name="units" type="String" value="percent"></attribute>\n",
       "\t</variable>\n",
       "\t<variable name="Temp" shape="time lat lon" type="double" orgName="T">\n",
       "\t\t<attribute name="long_name" type="String" value="surface temperature"></attribute>\n",
       "\t\t<attribute name="units" type="String" value="C"></attribute>\n",
       "\t</variable>\n",
       "\t<variable name="lat" shape="lat" type="float">\n",
       "\t\t<attribute name="units" type="String" value="degrees_north"></attribute>\n",
       "\t\t<values>41.0 40.0 39.0</values>\n",
       "\t</variable>\n",
       "\t<variable name="lon" shape="lon" type="float">\n",
       "\t\t<attribute name="units" type="String" value="degrees_east"></attribute>\n",
       "\t\t<values>-109.0 -107.0 -105.0 -103.0</values>\n",
       "\t</variable>\n",
       "\t<variable name="time" shape="time" type="int">\n",
       "\t\t<attribute name="units" type="String" value="hours"></attribute>\n",
       "\t\t<values>6 18</values>\n",
       "\t</variable>\n",
       "\t<remove name="Temp" type="variable"></remove>\n",
       "</netcdf>\n",
       "
\n" ], "text/latex": [ "\\begin{Verbatim}[commandchars=\\\\\\{\\}]\n", "\\PY{c+cp}{\\PYZlt{}?xml version=\\PYZdq{}1.0\\PYZdq{} encoding=\\PYZdq{}utf\\PYZhy{}8\\PYZdq{}?\\PYZgt{}}\n", "\\PY{n+nt}{\\PYZlt{}netcdf} \\PY{n+na}{location=}\\PY{l+s}{\\PYZdq{}nc/example1.nc\\PYZdq{}} \\PY{n+na}{xmlns=}\\PY{l+s}{\\PYZdq{}http://www.unidata.ucar.edu/namespaces/netcdf/ncml\\PYZhy{}2.2\\PYZdq{}}\\PY{n+nt}{\\PYZgt{}}\n", "\t\\PY{n+nt}{\\PYZlt{}dimension} \\PY{n+na}{name=}\\PY{l+s}{\\PYZdq{}time\\PYZdq{}} \\PY{n+na}{length=}\\PY{l+s}{\\PYZdq{}2\\PYZdq{}} \\PY{n+na}{isUnlimited=}\\PY{l+s}{\\PYZdq{}true\\PYZdq{}}\\PY{n+nt}{\\PYZgt{}}\\PY{n+nt}{\\PYZlt{}/dimension\\PYZgt{}}\n", "\t\\PY{n+nt}{\\PYZlt{}dimension} \\PY{n+na}{name=}\\PY{l+s}{\\PYZdq{}lat\\PYZdq{}} \\PY{n+na}{length=}\\PY{l+s}{\\PYZdq{}3\\PYZdq{}}\\PY{n+nt}{\\PYZgt{}}\\PY{n+nt}{\\PYZlt{}/dimension\\PYZgt{}}\n", "\t\\PY{n+nt}{\\PYZlt{}dimension} \\PY{n+na}{name=}\\PY{l+s}{\\PYZdq{}lon\\PYZdq{}} \\PY{n+na}{length=}\\PY{l+s}{\\PYZdq{}4\\PYZdq{}}\\PY{n+nt}{\\PYZgt{}}\\PY{n+nt}{\\PYZlt{}/dimension\\PYZgt{}}\n", "\t\\PY{n+nt}{\\PYZlt{}attribute} \\PY{n+na}{name=}\\PY{l+s}{\\PYZdq{}title\\PYZdq{}} \\PY{n+na}{type=}\\PY{l+s}{\\PYZdq{}String\\PYZdq{}} \\PY{n+na}{value=}\\PY{l+s}{\\PYZdq{}Example Data\\PYZdq{}}\\PY{n+nt}{\\PYZgt{}}\\PY{n+nt}{\\PYZlt{}/attribute\\PYZgt{}}\n", "\t\\PY{n+nt}{\\PYZlt{}variable} \\PY{n+na}{name=}\\PY{l+s}{\\PYZdq{}rh\\PYZdq{}} \\PY{n+na}{shape=}\\PY{l+s}{\\PYZdq{}time lat lon\\PYZdq{}} \\PY{n+na}{type=}\\PY{l+s}{\\PYZdq{}int\\PYZdq{}}\\PY{n+nt}{\\PYZgt{}}\n", "\t\t\\PY{n+nt}{\\PYZlt{}attribute} \\PY{n+na}{name=}\\PY{l+s}{\\PYZdq{}long\\PYZus{}name\\PYZdq{}} \\PY{n+na}{type=}\\PY{l+s}{\\PYZdq{}String\\PYZdq{}} \\PY{n+na}{value=}\\PY{l+s}{\\PYZdq{}relative humidity\\PYZdq{}}\\PY{n+nt}{\\PYZgt{}}\\PY{n+nt}{\\PYZlt{}/attribute\\PYZgt{}}\n", "\t\t\\PY{n+nt}{\\PYZlt{}attribute} \\PY{n+na}{name=}\\PY{l+s}{\\PYZdq{}units\\PYZdq{}} \\PY{n+na}{type=}\\PY{l+s}{\\PYZdq{}String\\PYZdq{}} \\PY{n+na}{value=}\\PY{l+s}{\\PYZdq{}percent\\PYZdq{}}\\PY{n+nt}{\\PYZgt{}}\\PY{n+nt}{\\PYZlt{}/attribute\\PYZgt{}}\n", "\t\\PY{n+nt}{\\PYZlt{}/variable\\PYZgt{}}\n", "\t\\PY{n+nt}{\\PYZlt{}variable} \\PY{n+na}{name=}\\PY{l+s}{\\PYZdq{}Temp\\PYZdq{}} \\PY{n+na}{shape=}\\PY{l+s}{\\PYZdq{}time lat lon\\PYZdq{}} \\PY{n+na}{type=}\\PY{l+s}{\\PYZdq{}double\\PYZdq{}} \\PY{n+na}{orgName=}\\PY{l+s}{\\PYZdq{}T\\PYZdq{}}\\PY{n+nt}{\\PYZgt{}}\n", "\t\t\\PY{n+nt}{\\PYZlt{}attribute} \\PY{n+na}{name=}\\PY{l+s}{\\PYZdq{}long\\PYZus{}name\\PYZdq{}} \\PY{n+na}{type=}\\PY{l+s}{\\PYZdq{}String\\PYZdq{}} \\PY{n+na}{value=}\\PY{l+s}{\\PYZdq{}surface temperature\\PYZdq{}}\\PY{n+nt}{\\PYZgt{}}\\PY{n+nt}{\\PYZlt{}/attribute\\PYZgt{}}\n", "\t\t\\PY{n+nt}{\\PYZlt{}attribute} \\PY{n+na}{name=}\\PY{l+s}{\\PYZdq{}units\\PYZdq{}} \\PY{n+na}{type=}\\PY{l+s}{\\PYZdq{}String\\PYZdq{}} \\PY{n+na}{value=}\\PY{l+s}{\\PYZdq{}C\\PYZdq{}}\\PY{n+nt}{\\PYZgt{}}\\PY{n+nt}{\\PYZlt{}/attribute\\PYZgt{}}\n", "\t\\PY{n+nt}{\\PYZlt{}/variable\\PYZgt{}}\n", "\t\\PY{n+nt}{\\PYZlt{}variable} \\PY{n+na}{name=}\\PY{l+s}{\\PYZdq{}lat\\PYZdq{}} \\PY{n+na}{shape=}\\PY{l+s}{\\PYZdq{}lat\\PYZdq{}} \\PY{n+na}{type=}\\PY{l+s}{\\PYZdq{}float\\PYZdq{}}\\PY{n+nt}{\\PYZgt{}}\n", "\t\t\\PY{n+nt}{\\PYZlt{}attribute} \\PY{n+na}{name=}\\PY{l+s}{\\PYZdq{}units\\PYZdq{}} \\PY{n+na}{type=}\\PY{l+s}{\\PYZdq{}String\\PYZdq{}} \\PY{n+na}{value=}\\PY{l+s}{\\PYZdq{}degrees\\PYZus{}north\\PYZdq{}}\\PY{n+nt}{\\PYZgt{}}\\PY{n+nt}{\\PYZlt{}/attribute\\PYZgt{}}\n", "\t\t\\PY{n+nt}{\\PYZlt{}values}\\PY{n+nt}{\\PYZgt{}}41.0 40.0 39.0\\PY{n+nt}{\\PYZlt{}/values\\PYZgt{}}\n", "\t\\PY{n+nt}{\\PYZlt{}/variable\\PYZgt{}}\n", "\t\\PY{n+nt}{\\PYZlt{}variable} \\PY{n+na}{name=}\\PY{l+s}{\\PYZdq{}lon\\PYZdq{}} \\PY{n+na}{shape=}\\PY{l+s}{\\PYZdq{}lon\\PYZdq{}} \\PY{n+na}{type=}\\PY{l+s}{\\PYZdq{}float\\PYZdq{}}\\PY{n+nt}{\\PYZgt{}}\n", "\t\t\\PY{n+nt}{\\PYZlt{}attribute} \\PY{n+na}{name=}\\PY{l+s}{\\PYZdq{}units\\PYZdq{}} \\PY{n+na}{type=}\\PY{l+s}{\\PYZdq{}String\\PYZdq{}} \\PY{n+na}{value=}\\PY{l+s}{\\PYZdq{}degrees\\PYZus{}east\\PYZdq{}}\\PY{n+nt}{\\PYZgt{}}\\PY{n+nt}{\\PYZlt{}/attribute\\PYZgt{}}\n", "\t\t\\PY{n+nt}{\\PYZlt{}values}\\PY{n+nt}{\\PYZgt{}}\\PYZhy{}109.0 \\PYZhy{}107.0 \\PYZhy{}105.0 \\PYZhy{}103.0\\PY{n+nt}{\\PYZlt{}/values\\PYZgt{}}\n", "\t\\PY{n+nt}{\\PYZlt{}/variable\\PYZgt{}}\n", "\t\\PY{n+nt}{\\PYZlt{}variable} \\PY{n+na}{name=}\\PY{l+s}{\\PYZdq{}time\\PYZdq{}} \\PY{n+na}{shape=}\\PY{l+s}{\\PYZdq{}time\\PYZdq{}} \\PY{n+na}{type=}\\PY{l+s}{\\PYZdq{}int\\PYZdq{}}\\PY{n+nt}{\\PYZgt{}}\n", "\t\t\\PY{n+nt}{\\PYZlt{}attribute} \\PY{n+na}{name=}\\PY{l+s}{\\PYZdq{}units\\PYZdq{}} \\PY{n+na}{type=}\\PY{l+s}{\\PYZdq{}String\\PYZdq{}} \\PY{n+na}{value=}\\PY{l+s}{\\PYZdq{}hours\\PYZdq{}}\\PY{n+nt}{\\PYZgt{}}\\PY{n+nt}{\\PYZlt{}/attribute\\PYZgt{}}\n", "\t\t\\PY{n+nt}{\\PYZlt{}values}\\PY{n+nt}{\\PYZgt{}}6 18\\PY{n+nt}{\\PYZlt{}/values\\PYZgt{}}\n", "\t\\PY{n+nt}{\\PYZlt{}/variable\\PYZgt{}}\n", "\t\\PY{n+nt}{\\PYZlt{}remove} \\PY{n+na}{name=}\\PY{l+s}{\\PYZdq{}Temp\\PYZdq{}} \\PY{n+na}{type=}\\PY{l+s}{\\PYZdq{}variable\\PYZdq{}}\\PY{n+nt}{\\PYZgt{}}\\PY{n+nt}{\\PYZlt{}/remove\\PYZgt{}}\n", "\\PY{n+nt}{\\PYZlt{}/netcdf\\PYZgt{}}\n", "\\end{Verbatim}\n" ], "text/plain": [ "\n", "\n", "\t\n", "\t\n", "\t\n", "\t\n", "\t\n", "\t\t\n", "\t\t\n", "\t\n", "\t\n", "\t\t\n", "\t\t\n", "\t\n", "\t\n", "\t\t\n", "\t\t41.0 40.0 39.0\n", "\t\n", "\t\n", "\t\t\n", "\t\t-109.0 -107.0 -105.0 -103.0\n", "\t\n", "\t\n", "\t\t\n", "\t\t6 18\n", "\t\n", "\t\n", "" ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ "nc.remove_variable('Temp')\n", "Code(repr(nc), language=\"XML\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Remove the attribute `units` from the variable `Temp`" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
<?xml version="1.0" encoding="utf-8"?>\n",
       "<netcdf location="nc/example1.nc" xmlns="http://www.unidata.ucar.edu/namespaces/netcdf/ncml-2.2">\n",
       "\t<dimension name="time" length="2" isUnlimited="true"></dimension>\n",
       "\t<dimension name="lat" length="3"></dimension>\n",
       "\t<dimension name="lon" length="4"></dimension>\n",
       "\t<attribute name="title" type="String" value="Example Data"></attribute>\n",
       "\t<variable name="rh" shape="time lat lon" type="int">\n",
       "\t\t<attribute name="long_name" type="String" value="relative humidity"></attribute>\n",
       "\t\t<attribute name="units" type="String" value="percent"></attribute>\n",
       "\t</variable>\n",
       "\t<variable name="Temp" shape="time lat lon" type="double" orgName="T">\n",
       "\t\t<attribute name="long_name" type="String" value="surface temperature"></attribute>\n",
       "\t\t<attribute name="units" type="String" value="C"></attribute>\n",
       "\t\t<remove name="units" type="attribute"></remove>\n",
       "\t</variable>\n",
       "\t<variable name="lat" shape="lat" type="float">\n",
       "\t\t<attribute name="units" type="String" value="degrees_north"></attribute>\n",
       "\t\t<values>41.0 40.0 39.0</values>\n",
       "\t</variable>\n",
       "\t<variable name="lon" shape="lon" type="float">\n",
       "\t\t<attribute name="units" type="String" value="degrees_east"></attribute>\n",
       "\t\t<values>-109.0 -107.0 -105.0 -103.0</values>\n",
       "\t</variable>\n",
       "\t<variable name="time" shape="time" type="int">\n",
       "\t\t<attribute name="units" type="String" value="hours"></attribute>\n",
       "\t\t<values>6 18</values>\n",
       "\t</variable>\n",
       "\t<remove name="Temp" type="variable"></remove>\n",
       "</netcdf>\n",
       "
\n" ], "text/latex": [ "\\begin{Verbatim}[commandchars=\\\\\\{\\}]\n", "\\PY{c+cp}{\\PYZlt{}?xml version=\\PYZdq{}1.0\\PYZdq{} encoding=\\PYZdq{}utf\\PYZhy{}8\\PYZdq{}?\\PYZgt{}}\n", "\\PY{n+nt}{\\PYZlt{}netcdf} \\PY{n+na}{location=}\\PY{l+s}{\\PYZdq{}nc/example1.nc\\PYZdq{}} \\PY{n+na}{xmlns=}\\PY{l+s}{\\PYZdq{}http://www.unidata.ucar.edu/namespaces/netcdf/ncml\\PYZhy{}2.2\\PYZdq{}}\\PY{n+nt}{\\PYZgt{}}\n", "\t\\PY{n+nt}{\\PYZlt{}dimension} \\PY{n+na}{name=}\\PY{l+s}{\\PYZdq{}time\\PYZdq{}} \\PY{n+na}{length=}\\PY{l+s}{\\PYZdq{}2\\PYZdq{}} \\PY{n+na}{isUnlimited=}\\PY{l+s}{\\PYZdq{}true\\PYZdq{}}\\PY{n+nt}{\\PYZgt{}}\\PY{n+nt}{\\PYZlt{}/dimension\\PYZgt{}}\n", "\t\\PY{n+nt}{\\PYZlt{}dimension} \\PY{n+na}{name=}\\PY{l+s}{\\PYZdq{}lat\\PYZdq{}} \\PY{n+na}{length=}\\PY{l+s}{\\PYZdq{}3\\PYZdq{}}\\PY{n+nt}{\\PYZgt{}}\\PY{n+nt}{\\PYZlt{}/dimension\\PYZgt{}}\n", "\t\\PY{n+nt}{\\PYZlt{}dimension} \\PY{n+na}{name=}\\PY{l+s}{\\PYZdq{}lon\\PYZdq{}} \\PY{n+na}{length=}\\PY{l+s}{\\PYZdq{}4\\PYZdq{}}\\PY{n+nt}{\\PYZgt{}}\\PY{n+nt}{\\PYZlt{}/dimension\\PYZgt{}}\n", "\t\\PY{n+nt}{\\PYZlt{}attribute} \\PY{n+na}{name=}\\PY{l+s}{\\PYZdq{}title\\PYZdq{}} \\PY{n+na}{type=}\\PY{l+s}{\\PYZdq{}String\\PYZdq{}} \\PY{n+na}{value=}\\PY{l+s}{\\PYZdq{}Example Data\\PYZdq{}}\\PY{n+nt}{\\PYZgt{}}\\PY{n+nt}{\\PYZlt{}/attribute\\PYZgt{}}\n", "\t\\PY{n+nt}{\\PYZlt{}variable} \\PY{n+na}{name=}\\PY{l+s}{\\PYZdq{}rh\\PYZdq{}} \\PY{n+na}{shape=}\\PY{l+s}{\\PYZdq{}time lat lon\\PYZdq{}} \\PY{n+na}{type=}\\PY{l+s}{\\PYZdq{}int\\PYZdq{}}\\PY{n+nt}{\\PYZgt{}}\n", "\t\t\\PY{n+nt}{\\PYZlt{}attribute} \\PY{n+na}{name=}\\PY{l+s}{\\PYZdq{}long\\PYZus{}name\\PYZdq{}} \\PY{n+na}{type=}\\PY{l+s}{\\PYZdq{}String\\PYZdq{}} \\PY{n+na}{value=}\\PY{l+s}{\\PYZdq{}relative humidity\\PYZdq{}}\\PY{n+nt}{\\PYZgt{}}\\PY{n+nt}{\\PYZlt{}/attribute\\PYZgt{}}\n", "\t\t\\PY{n+nt}{\\PYZlt{}attribute} \\PY{n+na}{name=}\\PY{l+s}{\\PYZdq{}units\\PYZdq{}} \\PY{n+na}{type=}\\PY{l+s}{\\PYZdq{}String\\PYZdq{}} \\PY{n+na}{value=}\\PY{l+s}{\\PYZdq{}percent\\PYZdq{}}\\PY{n+nt}{\\PYZgt{}}\\PY{n+nt}{\\PYZlt{}/attribute\\PYZgt{}}\n", "\t\\PY{n+nt}{\\PYZlt{}/variable\\PYZgt{}}\n", "\t\\PY{n+nt}{\\PYZlt{}variable} \\PY{n+na}{name=}\\PY{l+s}{\\PYZdq{}Temp\\PYZdq{}} \\PY{n+na}{shape=}\\PY{l+s}{\\PYZdq{}time lat lon\\PYZdq{}} \\PY{n+na}{type=}\\PY{l+s}{\\PYZdq{}double\\PYZdq{}} \\PY{n+na}{orgName=}\\PY{l+s}{\\PYZdq{}T\\PYZdq{}}\\PY{n+nt}{\\PYZgt{}}\n", "\t\t\\PY{n+nt}{\\PYZlt{}attribute} \\PY{n+na}{name=}\\PY{l+s}{\\PYZdq{}long\\PYZus{}name\\PYZdq{}} \\PY{n+na}{type=}\\PY{l+s}{\\PYZdq{}String\\PYZdq{}} \\PY{n+na}{value=}\\PY{l+s}{\\PYZdq{}surface temperature\\PYZdq{}}\\PY{n+nt}{\\PYZgt{}}\\PY{n+nt}{\\PYZlt{}/attribute\\PYZgt{}}\n", "\t\t\\PY{n+nt}{\\PYZlt{}attribute} \\PY{n+na}{name=}\\PY{l+s}{\\PYZdq{}units\\PYZdq{}} \\PY{n+na}{type=}\\PY{l+s}{\\PYZdq{}String\\PYZdq{}} \\PY{n+na}{value=}\\PY{l+s}{\\PYZdq{}C\\PYZdq{}}\\PY{n+nt}{\\PYZgt{}}\\PY{n+nt}{\\PYZlt{}/attribute\\PYZgt{}}\n", "\t\t\\PY{n+nt}{\\PYZlt{}remove} \\PY{n+na}{name=}\\PY{l+s}{\\PYZdq{}units\\PYZdq{}} \\PY{n+na}{type=}\\PY{l+s}{\\PYZdq{}attribute\\PYZdq{}}\\PY{n+nt}{\\PYZgt{}}\\PY{n+nt}{\\PYZlt{}/remove\\PYZgt{}}\n", "\t\\PY{n+nt}{\\PYZlt{}/variable\\PYZgt{}}\n", "\t\\PY{n+nt}{\\PYZlt{}variable} \\PY{n+na}{name=}\\PY{l+s}{\\PYZdq{}lat\\PYZdq{}} \\PY{n+na}{shape=}\\PY{l+s}{\\PYZdq{}lat\\PYZdq{}} \\PY{n+na}{type=}\\PY{l+s}{\\PYZdq{}float\\PYZdq{}}\\PY{n+nt}{\\PYZgt{}}\n", "\t\t\\PY{n+nt}{\\PYZlt{}attribute} \\PY{n+na}{name=}\\PY{l+s}{\\PYZdq{}units\\PYZdq{}} \\PY{n+na}{type=}\\PY{l+s}{\\PYZdq{}String\\PYZdq{}} \\PY{n+na}{value=}\\PY{l+s}{\\PYZdq{}degrees\\PYZus{}north\\PYZdq{}}\\PY{n+nt}{\\PYZgt{}}\\PY{n+nt}{\\PYZlt{}/attribute\\PYZgt{}}\n", "\t\t\\PY{n+nt}{\\PYZlt{}values}\\PY{n+nt}{\\PYZgt{}}41.0 40.0 39.0\\PY{n+nt}{\\PYZlt{}/values\\PYZgt{}}\n", "\t\\PY{n+nt}{\\PYZlt{}/variable\\PYZgt{}}\n", "\t\\PY{n+nt}{\\PYZlt{}variable} \\PY{n+na}{name=}\\PY{l+s}{\\PYZdq{}lon\\PYZdq{}} \\PY{n+na}{shape=}\\PY{l+s}{\\PYZdq{}lon\\PYZdq{}} \\PY{n+na}{type=}\\PY{l+s}{\\PYZdq{}float\\PYZdq{}}\\PY{n+nt}{\\PYZgt{}}\n", "\t\t\\PY{n+nt}{\\PYZlt{}attribute} \\PY{n+na}{name=}\\PY{l+s}{\\PYZdq{}units\\PYZdq{}} \\PY{n+na}{type=}\\PY{l+s}{\\PYZdq{}String\\PYZdq{}} \\PY{n+na}{value=}\\PY{l+s}{\\PYZdq{}degrees\\PYZus{}east\\PYZdq{}}\\PY{n+nt}{\\PYZgt{}}\\PY{n+nt}{\\PYZlt{}/attribute\\PYZgt{}}\n", "\t\t\\PY{n+nt}{\\PYZlt{}values}\\PY{n+nt}{\\PYZgt{}}\\PYZhy{}109.0 \\PYZhy{}107.0 \\PYZhy{}105.0 \\PYZhy{}103.0\\PY{n+nt}{\\PYZlt{}/values\\PYZgt{}}\n", "\t\\PY{n+nt}{\\PYZlt{}/variable\\PYZgt{}}\n", "\t\\PY{n+nt}{\\PYZlt{}variable} \\PY{n+na}{name=}\\PY{l+s}{\\PYZdq{}time\\PYZdq{}} \\PY{n+na}{shape=}\\PY{l+s}{\\PYZdq{}time\\PYZdq{}} \\PY{n+na}{type=}\\PY{l+s}{\\PYZdq{}int\\PYZdq{}}\\PY{n+nt}{\\PYZgt{}}\n", "\t\t\\PY{n+nt}{\\PYZlt{}attribute} \\PY{n+na}{name=}\\PY{l+s}{\\PYZdq{}units\\PYZdq{}} \\PY{n+na}{type=}\\PY{l+s}{\\PYZdq{}String\\PYZdq{}} \\PY{n+na}{value=}\\PY{l+s}{\\PYZdq{}hours\\PYZdq{}}\\PY{n+nt}{\\PYZgt{}}\\PY{n+nt}{\\PYZlt{}/attribute\\PYZgt{}}\n", "\t\t\\PY{n+nt}{\\PYZlt{}values}\\PY{n+nt}{\\PYZgt{}}6 18\\PY{n+nt}{\\PYZlt{}/values\\PYZgt{}}\n", "\t\\PY{n+nt}{\\PYZlt{}/variable\\PYZgt{}}\n", "\t\\PY{n+nt}{\\PYZlt{}remove} \\PY{n+na}{name=}\\PY{l+s}{\\PYZdq{}Temp\\PYZdq{}} \\PY{n+na}{type=}\\PY{l+s}{\\PYZdq{}variable\\PYZdq{}}\\PY{n+nt}{\\PYZgt{}}\\PY{n+nt}{\\PYZlt{}/remove\\PYZgt{}}\n", "\\PY{n+nt}{\\PYZlt{}/netcdf\\PYZgt{}}\n", "\\end{Verbatim}\n" ], "text/plain": [ "\n", "\n", "\t\n", "\t\n", "\t\n", "\t\n", "\t\n", "\t\t\n", "\t\t\n", "\t\n", "\t\n", "\t\t\n", "\t\t\n", "\t\t\n", "\t\n", "\t\n", "\t\t\n", "\t\t41.0 40.0 39.0\n", "\t\n", "\t\n", "\t\t\n", "\t\t-109.0 -107.0 -105.0 -103.0\n", "\t\n", "\t\n", "\t\t\n", "\t\t6 18\n", "\t\n", "\t\n", "" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "nc.remove_variable_attribute(variable='Temp', key='units')\n", "Code(repr(nc), language=\"XML\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Remove the global `title` attribute from the dataset" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
<?xml version="1.0" encoding="utf-8"?>\n",
       "<netcdf location="nc/example1.nc" xmlns="http://www.unidata.ucar.edu/namespaces/netcdf/ncml-2.2">\n",
       "\t<dimension name="time" length="2" isUnlimited="true"></dimension>\n",
       "\t<dimension name="lat" length="3"></dimension>\n",
       "\t<dimension name="lon" length="4"></dimension>\n",
       "\t<attribute name="title" type="String" value="Example Data"></attribute>\n",
       "\t<variable name="rh" shape="time lat lon" type="int">\n",
       "\t\t<attribute name="long_name" type="String" value="relative humidity"></attribute>\n",
       "\t\t<attribute name="units" type="String" value="percent"></attribute>\n",
       "\t</variable>\n",
       "\t<variable name="Temp" shape="time lat lon" type="double" orgName="T">\n",
       "\t\t<attribute name="long_name" type="String" value="surface temperature"></attribute>\n",
       "\t\t<attribute name="units" type="String" value="C"></attribute>\n",
       "\t\t<remove name="units" type="attribute"></remove>\n",
       "\t</variable>\n",
       "\t<variable name="lat" shape="lat" type="float">\n",
       "\t\t<attribute name="units" type="String" value="degrees_north"></attribute>\n",
       "\t\t<values>41.0 40.0 39.0</values>\n",
       "\t</variable>\n",
       "\t<variable name="lon" shape="lon" type="float">\n",
       "\t\t<attribute name="units" type="String" value="degrees_east"></attribute>\n",
       "\t\t<values>-109.0 -107.0 -105.0 -103.0</values>\n",
       "\t</variable>\n",
       "\t<variable name="time" shape="time" type="int">\n",
       "\t\t<attribute name="units" type="String" value="hours"></attribute>\n",
       "\t\t<values>6 18</values>\n",
       "\t</variable>\n",
       "\t<remove name="Temp" type="variable"></remove>\n",
       "\t<remove name="title" type="attribute"></remove>\n",
       "</netcdf>\n",
       "
\n" ], "text/latex": [ "\\begin{Verbatim}[commandchars=\\\\\\{\\}]\n", "\\PY{c+cp}{\\PYZlt{}?xml version=\\PYZdq{}1.0\\PYZdq{} encoding=\\PYZdq{}utf\\PYZhy{}8\\PYZdq{}?\\PYZgt{}}\n", "\\PY{n+nt}{\\PYZlt{}netcdf} \\PY{n+na}{location=}\\PY{l+s}{\\PYZdq{}nc/example1.nc\\PYZdq{}} \\PY{n+na}{xmlns=}\\PY{l+s}{\\PYZdq{}http://www.unidata.ucar.edu/namespaces/netcdf/ncml\\PYZhy{}2.2\\PYZdq{}}\\PY{n+nt}{\\PYZgt{}}\n", "\t\\PY{n+nt}{\\PYZlt{}dimension} \\PY{n+na}{name=}\\PY{l+s}{\\PYZdq{}time\\PYZdq{}} \\PY{n+na}{length=}\\PY{l+s}{\\PYZdq{}2\\PYZdq{}} \\PY{n+na}{isUnlimited=}\\PY{l+s}{\\PYZdq{}true\\PYZdq{}}\\PY{n+nt}{\\PYZgt{}}\\PY{n+nt}{\\PYZlt{}/dimension\\PYZgt{}}\n", "\t\\PY{n+nt}{\\PYZlt{}dimension} \\PY{n+na}{name=}\\PY{l+s}{\\PYZdq{}lat\\PYZdq{}} \\PY{n+na}{length=}\\PY{l+s}{\\PYZdq{}3\\PYZdq{}}\\PY{n+nt}{\\PYZgt{}}\\PY{n+nt}{\\PYZlt{}/dimension\\PYZgt{}}\n", "\t\\PY{n+nt}{\\PYZlt{}dimension} \\PY{n+na}{name=}\\PY{l+s}{\\PYZdq{}lon\\PYZdq{}} \\PY{n+na}{length=}\\PY{l+s}{\\PYZdq{}4\\PYZdq{}}\\PY{n+nt}{\\PYZgt{}}\\PY{n+nt}{\\PYZlt{}/dimension\\PYZgt{}}\n", "\t\\PY{n+nt}{\\PYZlt{}attribute} \\PY{n+na}{name=}\\PY{l+s}{\\PYZdq{}title\\PYZdq{}} \\PY{n+na}{type=}\\PY{l+s}{\\PYZdq{}String\\PYZdq{}} \\PY{n+na}{value=}\\PY{l+s}{\\PYZdq{}Example Data\\PYZdq{}}\\PY{n+nt}{\\PYZgt{}}\\PY{n+nt}{\\PYZlt{}/attribute\\PYZgt{}}\n", "\t\\PY{n+nt}{\\PYZlt{}variable} \\PY{n+na}{name=}\\PY{l+s}{\\PYZdq{}rh\\PYZdq{}} \\PY{n+na}{shape=}\\PY{l+s}{\\PYZdq{}time lat lon\\PYZdq{}} \\PY{n+na}{type=}\\PY{l+s}{\\PYZdq{}int\\PYZdq{}}\\PY{n+nt}{\\PYZgt{}}\n", "\t\t\\PY{n+nt}{\\PYZlt{}attribute} \\PY{n+na}{name=}\\PY{l+s}{\\PYZdq{}long\\PYZus{}name\\PYZdq{}} \\PY{n+na}{type=}\\PY{l+s}{\\PYZdq{}String\\PYZdq{}} \\PY{n+na}{value=}\\PY{l+s}{\\PYZdq{}relative humidity\\PYZdq{}}\\PY{n+nt}{\\PYZgt{}}\\PY{n+nt}{\\PYZlt{}/attribute\\PYZgt{}}\n", "\t\t\\PY{n+nt}{\\PYZlt{}attribute} \\PY{n+na}{name=}\\PY{l+s}{\\PYZdq{}units\\PYZdq{}} \\PY{n+na}{type=}\\PY{l+s}{\\PYZdq{}String\\PYZdq{}} \\PY{n+na}{value=}\\PY{l+s}{\\PYZdq{}percent\\PYZdq{}}\\PY{n+nt}{\\PYZgt{}}\\PY{n+nt}{\\PYZlt{}/attribute\\PYZgt{}}\n", "\t\\PY{n+nt}{\\PYZlt{}/variable\\PYZgt{}}\n", "\t\\PY{n+nt}{\\PYZlt{}variable} \\PY{n+na}{name=}\\PY{l+s}{\\PYZdq{}Temp\\PYZdq{}} \\PY{n+na}{shape=}\\PY{l+s}{\\PYZdq{}time lat lon\\PYZdq{}} \\PY{n+na}{type=}\\PY{l+s}{\\PYZdq{}double\\PYZdq{}} \\PY{n+na}{orgName=}\\PY{l+s}{\\PYZdq{}T\\PYZdq{}}\\PY{n+nt}{\\PYZgt{}}\n", "\t\t\\PY{n+nt}{\\PYZlt{}attribute} \\PY{n+na}{name=}\\PY{l+s}{\\PYZdq{}long\\PYZus{}name\\PYZdq{}} \\PY{n+na}{type=}\\PY{l+s}{\\PYZdq{}String\\PYZdq{}} \\PY{n+na}{value=}\\PY{l+s}{\\PYZdq{}surface temperature\\PYZdq{}}\\PY{n+nt}{\\PYZgt{}}\\PY{n+nt}{\\PYZlt{}/attribute\\PYZgt{}}\n", "\t\t\\PY{n+nt}{\\PYZlt{}attribute} \\PY{n+na}{name=}\\PY{l+s}{\\PYZdq{}units\\PYZdq{}} \\PY{n+na}{type=}\\PY{l+s}{\\PYZdq{}String\\PYZdq{}} \\PY{n+na}{value=}\\PY{l+s}{\\PYZdq{}C\\PYZdq{}}\\PY{n+nt}{\\PYZgt{}}\\PY{n+nt}{\\PYZlt{}/attribute\\PYZgt{}}\n", "\t\t\\PY{n+nt}{\\PYZlt{}remove} \\PY{n+na}{name=}\\PY{l+s}{\\PYZdq{}units\\PYZdq{}} \\PY{n+na}{type=}\\PY{l+s}{\\PYZdq{}attribute\\PYZdq{}}\\PY{n+nt}{\\PYZgt{}}\\PY{n+nt}{\\PYZlt{}/remove\\PYZgt{}}\n", "\t\\PY{n+nt}{\\PYZlt{}/variable\\PYZgt{}}\n", "\t\\PY{n+nt}{\\PYZlt{}variable} \\PY{n+na}{name=}\\PY{l+s}{\\PYZdq{}lat\\PYZdq{}} \\PY{n+na}{shape=}\\PY{l+s}{\\PYZdq{}lat\\PYZdq{}} \\PY{n+na}{type=}\\PY{l+s}{\\PYZdq{}float\\PYZdq{}}\\PY{n+nt}{\\PYZgt{}}\n", "\t\t\\PY{n+nt}{\\PYZlt{}attribute} \\PY{n+na}{name=}\\PY{l+s}{\\PYZdq{}units\\PYZdq{}} \\PY{n+na}{type=}\\PY{l+s}{\\PYZdq{}String\\PYZdq{}} \\PY{n+na}{value=}\\PY{l+s}{\\PYZdq{}degrees\\PYZus{}north\\PYZdq{}}\\PY{n+nt}{\\PYZgt{}}\\PY{n+nt}{\\PYZlt{}/attribute\\PYZgt{}}\n", "\t\t\\PY{n+nt}{\\PYZlt{}values}\\PY{n+nt}{\\PYZgt{}}41.0 40.0 39.0\\PY{n+nt}{\\PYZlt{}/values\\PYZgt{}}\n", "\t\\PY{n+nt}{\\PYZlt{}/variable\\PYZgt{}}\n", "\t\\PY{n+nt}{\\PYZlt{}variable} \\PY{n+na}{name=}\\PY{l+s}{\\PYZdq{}lon\\PYZdq{}} \\PY{n+na}{shape=}\\PY{l+s}{\\PYZdq{}lon\\PYZdq{}} \\PY{n+na}{type=}\\PY{l+s}{\\PYZdq{}float\\PYZdq{}}\\PY{n+nt}{\\PYZgt{}}\n", "\t\t\\PY{n+nt}{\\PYZlt{}attribute} \\PY{n+na}{name=}\\PY{l+s}{\\PYZdq{}units\\PYZdq{}} \\PY{n+na}{type=}\\PY{l+s}{\\PYZdq{}String\\PYZdq{}} \\PY{n+na}{value=}\\PY{l+s}{\\PYZdq{}degrees\\PYZus{}east\\PYZdq{}}\\PY{n+nt}{\\PYZgt{}}\\PY{n+nt}{\\PYZlt{}/attribute\\PYZgt{}}\n", "\t\t\\PY{n+nt}{\\PYZlt{}values}\\PY{n+nt}{\\PYZgt{}}\\PYZhy{}109.0 \\PYZhy{}107.0 \\PYZhy{}105.0 \\PYZhy{}103.0\\PY{n+nt}{\\PYZlt{}/values\\PYZgt{}}\n", "\t\\PY{n+nt}{\\PYZlt{}/variable\\PYZgt{}}\n", "\t\\PY{n+nt}{\\PYZlt{}variable} \\PY{n+na}{name=}\\PY{l+s}{\\PYZdq{}time\\PYZdq{}} \\PY{n+na}{shape=}\\PY{l+s}{\\PYZdq{}time\\PYZdq{}} \\PY{n+na}{type=}\\PY{l+s}{\\PYZdq{}int\\PYZdq{}}\\PY{n+nt}{\\PYZgt{}}\n", "\t\t\\PY{n+nt}{\\PYZlt{}attribute} \\PY{n+na}{name=}\\PY{l+s}{\\PYZdq{}units\\PYZdq{}} \\PY{n+na}{type=}\\PY{l+s}{\\PYZdq{}String\\PYZdq{}} \\PY{n+na}{value=}\\PY{l+s}{\\PYZdq{}hours\\PYZdq{}}\\PY{n+nt}{\\PYZgt{}}\\PY{n+nt}{\\PYZlt{}/attribute\\PYZgt{}}\n", "\t\t\\PY{n+nt}{\\PYZlt{}values}\\PY{n+nt}{\\PYZgt{}}6 18\\PY{n+nt}{\\PYZlt{}/values\\PYZgt{}}\n", "\t\\PY{n+nt}{\\PYZlt{}/variable\\PYZgt{}}\n", "\t\\PY{n+nt}{\\PYZlt{}remove} \\PY{n+na}{name=}\\PY{l+s}{\\PYZdq{}Temp\\PYZdq{}} \\PY{n+na}{type=}\\PY{l+s}{\\PYZdq{}variable\\PYZdq{}}\\PY{n+nt}{\\PYZgt{}}\\PY{n+nt}{\\PYZlt{}/remove\\PYZgt{}}\n", "\t\\PY{n+nt}{\\PYZlt{}remove} \\PY{n+na}{name=}\\PY{l+s}{\\PYZdq{}title\\PYZdq{}} \\PY{n+na}{type=}\\PY{l+s}{\\PYZdq{}attribute\\PYZdq{}}\\PY{n+nt}{\\PYZgt{}}\\PY{n+nt}{\\PYZlt{}/remove\\PYZgt{}}\n", "\\PY{n+nt}{\\PYZlt{}/netcdf\\PYZgt{}}\n", "\\end{Verbatim}\n" ], "text/plain": [ "\n", "\n", "\t\n", "\t\n", "\t\n", "\t\n", "\t\n", "\t\t\n", "\t\t\n", "\t\n", "\t\n", "\t\t\n", "\t\t\n", "\t\t\n", "\t\n", "\t\n", "\t\t\n", "\t\t41.0 40.0 39.0\n", "\t\n", "\t\n", "\t\t\n", "\t\t-109.0 -107.0 -105.0 -103.0\n", "\t\n", "\t\n", "\t\t\n", "\t\t6 18\n", "\t\n", "\t\n", "\t\n", "" ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" } ], "source": [ "nc.remove_dataset_attribute('title')\n", "Code(repr(nc), language=\"XML\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Add a global `history` attribute" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
<?xml version="1.0" encoding="utf-8"?>\n",
       "<netcdf location="nc/example1.nc" xmlns="http://www.unidata.ucar.edu/namespaces/netcdf/ncml-2.2">\n",
       "\t<dimension name="time" length="2" isUnlimited="true"></dimension>\n",
       "\t<dimension name="lat" length="3"></dimension>\n",
       "\t<dimension name="lon" length="4"></dimension>\n",
       "\t<attribute name="title" type="String" value="Example Data"></attribute>\n",
       "\t<attribute name="Conventions" type="String" value="CF-2.0"></attribute>\n",
       "\t<variable name="rh" shape="time lat lon" type="int">\n",
       "\t\t<attribute name="long_name" type="String" value="relative humidity"></attribute>\n",
       "\t\t<attribute name="units" type="String" value="percent"></attribute>\n",
       "\t</variable>\n",
       "\t<variable name="Temp" shape="time lat lon" type="double" orgName="T">\n",
       "\t\t<attribute name="long_name" type="String" value="surface temperature"></attribute>\n",
       "\t\t<attribute name="units" type="String" value="C"></attribute>\n",
       "\t\t<remove name="units" type="attribute"></remove>\n",
       "\t</variable>\n",
       "\t<variable name="lat" shape="lat" type="float">\n",
       "\t\t<attribute name="units" type="String" value="degrees_north"></attribute>\n",
       "\t\t<values>41.0 40.0 39.0</values>\n",
       "\t</variable>\n",
       "\t<variable name="lon" shape="lon" type="float">\n",
       "\t\t<attribute name="units" type="String" value="degrees_east"></attribute>\n",
       "\t\t<values>-109.0 -107.0 -105.0 -103.0</values>\n",
       "\t</variable>\n",
       "\t<variable name="time" shape="time" type="int">\n",
       "\t\t<attribute name="units" type="String" value="hours"></attribute>\n",
       "\t\t<values>6 18</values>\n",
       "\t</variable>\n",
       "\t<remove name="Temp" type="variable"></remove>\n",
       "\t<remove name="title" type="attribute"></remove>\n",
       "</netcdf>\n",
       "
\n" ], "text/latex": [ "\\begin{Verbatim}[commandchars=\\\\\\{\\}]\n", "\\PY{c+cp}{\\PYZlt{}?xml version=\\PYZdq{}1.0\\PYZdq{} encoding=\\PYZdq{}utf\\PYZhy{}8\\PYZdq{}?\\PYZgt{}}\n", "\\PY{n+nt}{\\PYZlt{}netcdf} \\PY{n+na}{location=}\\PY{l+s}{\\PYZdq{}nc/example1.nc\\PYZdq{}} \\PY{n+na}{xmlns=}\\PY{l+s}{\\PYZdq{}http://www.unidata.ucar.edu/namespaces/netcdf/ncml\\PYZhy{}2.2\\PYZdq{}}\\PY{n+nt}{\\PYZgt{}}\n", "\t\\PY{n+nt}{\\PYZlt{}dimension} \\PY{n+na}{name=}\\PY{l+s}{\\PYZdq{}time\\PYZdq{}} \\PY{n+na}{length=}\\PY{l+s}{\\PYZdq{}2\\PYZdq{}} \\PY{n+na}{isUnlimited=}\\PY{l+s}{\\PYZdq{}true\\PYZdq{}}\\PY{n+nt}{\\PYZgt{}}\\PY{n+nt}{\\PYZlt{}/dimension\\PYZgt{}}\n", "\t\\PY{n+nt}{\\PYZlt{}dimension} \\PY{n+na}{name=}\\PY{l+s}{\\PYZdq{}lat\\PYZdq{}} \\PY{n+na}{length=}\\PY{l+s}{\\PYZdq{}3\\PYZdq{}}\\PY{n+nt}{\\PYZgt{}}\\PY{n+nt}{\\PYZlt{}/dimension\\PYZgt{}}\n", "\t\\PY{n+nt}{\\PYZlt{}dimension} \\PY{n+na}{name=}\\PY{l+s}{\\PYZdq{}lon\\PYZdq{}} \\PY{n+na}{length=}\\PY{l+s}{\\PYZdq{}4\\PYZdq{}}\\PY{n+nt}{\\PYZgt{}}\\PY{n+nt}{\\PYZlt{}/dimension\\PYZgt{}}\n", "\t\\PY{n+nt}{\\PYZlt{}attribute} \\PY{n+na}{name=}\\PY{l+s}{\\PYZdq{}title\\PYZdq{}} \\PY{n+na}{type=}\\PY{l+s}{\\PYZdq{}String\\PYZdq{}} \\PY{n+na}{value=}\\PY{l+s}{\\PYZdq{}Example Data\\PYZdq{}}\\PY{n+nt}{\\PYZgt{}}\\PY{n+nt}{\\PYZlt{}/attribute\\PYZgt{}}\n", "\t\\PY{n+nt}{\\PYZlt{}attribute} \\PY{n+na}{name=}\\PY{l+s}{\\PYZdq{}Conventions\\PYZdq{}} \\PY{n+na}{type=}\\PY{l+s}{\\PYZdq{}String\\PYZdq{}} \\PY{n+na}{value=}\\PY{l+s}{\\PYZdq{}CF\\PYZhy{}2.0\\PYZdq{}}\\PY{n+nt}{\\PYZgt{}}\\PY{n+nt}{\\PYZlt{}/attribute\\PYZgt{}}\n", "\t\\PY{n+nt}{\\PYZlt{}variable} \\PY{n+na}{name=}\\PY{l+s}{\\PYZdq{}rh\\PYZdq{}} \\PY{n+na}{shape=}\\PY{l+s}{\\PYZdq{}time lat lon\\PYZdq{}} \\PY{n+na}{type=}\\PY{l+s}{\\PYZdq{}int\\PYZdq{}}\\PY{n+nt}{\\PYZgt{}}\n", "\t\t\\PY{n+nt}{\\PYZlt{}attribute} \\PY{n+na}{name=}\\PY{l+s}{\\PYZdq{}long\\PYZus{}name\\PYZdq{}} \\PY{n+na}{type=}\\PY{l+s}{\\PYZdq{}String\\PYZdq{}} \\PY{n+na}{value=}\\PY{l+s}{\\PYZdq{}relative humidity\\PYZdq{}}\\PY{n+nt}{\\PYZgt{}}\\PY{n+nt}{\\PYZlt{}/attribute\\PYZgt{}}\n", "\t\t\\PY{n+nt}{\\PYZlt{}attribute} \\PY{n+na}{name=}\\PY{l+s}{\\PYZdq{}units\\PYZdq{}} \\PY{n+na}{type=}\\PY{l+s}{\\PYZdq{}String\\PYZdq{}} \\PY{n+na}{value=}\\PY{l+s}{\\PYZdq{}percent\\PYZdq{}}\\PY{n+nt}{\\PYZgt{}}\\PY{n+nt}{\\PYZlt{}/attribute\\PYZgt{}}\n", "\t\\PY{n+nt}{\\PYZlt{}/variable\\PYZgt{}}\n", "\t\\PY{n+nt}{\\PYZlt{}variable} \\PY{n+na}{name=}\\PY{l+s}{\\PYZdq{}Temp\\PYZdq{}} \\PY{n+na}{shape=}\\PY{l+s}{\\PYZdq{}time lat lon\\PYZdq{}} \\PY{n+na}{type=}\\PY{l+s}{\\PYZdq{}double\\PYZdq{}} \\PY{n+na}{orgName=}\\PY{l+s}{\\PYZdq{}T\\PYZdq{}}\\PY{n+nt}{\\PYZgt{}}\n", "\t\t\\PY{n+nt}{\\PYZlt{}attribute} \\PY{n+na}{name=}\\PY{l+s}{\\PYZdq{}long\\PYZus{}name\\PYZdq{}} \\PY{n+na}{type=}\\PY{l+s}{\\PYZdq{}String\\PYZdq{}} \\PY{n+na}{value=}\\PY{l+s}{\\PYZdq{}surface temperature\\PYZdq{}}\\PY{n+nt}{\\PYZgt{}}\\PY{n+nt}{\\PYZlt{}/attribute\\PYZgt{}}\n", "\t\t\\PY{n+nt}{\\PYZlt{}attribute} \\PY{n+na}{name=}\\PY{l+s}{\\PYZdq{}units\\PYZdq{}} \\PY{n+na}{type=}\\PY{l+s}{\\PYZdq{}String\\PYZdq{}} \\PY{n+na}{value=}\\PY{l+s}{\\PYZdq{}C\\PYZdq{}}\\PY{n+nt}{\\PYZgt{}}\\PY{n+nt}{\\PYZlt{}/attribute\\PYZgt{}}\n", "\t\t\\PY{n+nt}{\\PYZlt{}remove} \\PY{n+na}{name=}\\PY{l+s}{\\PYZdq{}units\\PYZdq{}} \\PY{n+na}{type=}\\PY{l+s}{\\PYZdq{}attribute\\PYZdq{}}\\PY{n+nt}{\\PYZgt{}}\\PY{n+nt}{\\PYZlt{}/remove\\PYZgt{}}\n", "\t\\PY{n+nt}{\\PYZlt{}/variable\\PYZgt{}}\n", "\t\\PY{n+nt}{\\PYZlt{}variable} \\PY{n+na}{name=}\\PY{l+s}{\\PYZdq{}lat\\PYZdq{}} \\PY{n+na}{shape=}\\PY{l+s}{\\PYZdq{}lat\\PYZdq{}} \\PY{n+na}{type=}\\PY{l+s}{\\PYZdq{}float\\PYZdq{}}\\PY{n+nt}{\\PYZgt{}}\n", "\t\t\\PY{n+nt}{\\PYZlt{}attribute} \\PY{n+na}{name=}\\PY{l+s}{\\PYZdq{}units\\PYZdq{}} \\PY{n+na}{type=}\\PY{l+s}{\\PYZdq{}String\\PYZdq{}} \\PY{n+na}{value=}\\PY{l+s}{\\PYZdq{}degrees\\PYZus{}north\\PYZdq{}}\\PY{n+nt}{\\PYZgt{}}\\PY{n+nt}{\\PYZlt{}/attribute\\PYZgt{}}\n", "\t\t\\PY{n+nt}{\\PYZlt{}values}\\PY{n+nt}{\\PYZgt{}}41.0 40.0 39.0\\PY{n+nt}{\\PYZlt{}/values\\PYZgt{}}\n", "\t\\PY{n+nt}{\\PYZlt{}/variable\\PYZgt{}}\n", "\t\\PY{n+nt}{\\PYZlt{}variable} \\PY{n+na}{name=}\\PY{l+s}{\\PYZdq{}lon\\PYZdq{}} \\PY{n+na}{shape=}\\PY{l+s}{\\PYZdq{}lon\\PYZdq{}} \\PY{n+na}{type=}\\PY{l+s}{\\PYZdq{}float\\PYZdq{}}\\PY{n+nt}{\\PYZgt{}}\n", "\t\t\\PY{n+nt}{\\PYZlt{}attribute} \\PY{n+na}{name=}\\PY{l+s}{\\PYZdq{}units\\PYZdq{}} \\PY{n+na}{type=}\\PY{l+s}{\\PYZdq{}String\\PYZdq{}} \\PY{n+na}{value=}\\PY{l+s}{\\PYZdq{}degrees\\PYZus{}east\\PYZdq{}}\\PY{n+nt}{\\PYZgt{}}\\PY{n+nt}{\\PYZlt{}/attribute\\PYZgt{}}\n", "\t\t\\PY{n+nt}{\\PYZlt{}values}\\PY{n+nt}{\\PYZgt{}}\\PYZhy{}109.0 \\PYZhy{}107.0 \\PYZhy{}105.0 \\PYZhy{}103.0\\PY{n+nt}{\\PYZlt{}/values\\PYZgt{}}\n", "\t\\PY{n+nt}{\\PYZlt{}/variable\\PYZgt{}}\n", "\t\\PY{n+nt}{\\PYZlt{}variable} \\PY{n+na}{name=}\\PY{l+s}{\\PYZdq{}time\\PYZdq{}} \\PY{n+na}{shape=}\\PY{l+s}{\\PYZdq{}time\\PYZdq{}} \\PY{n+na}{type=}\\PY{l+s}{\\PYZdq{}int\\PYZdq{}}\\PY{n+nt}{\\PYZgt{}}\n", "\t\t\\PY{n+nt}{\\PYZlt{}attribute} \\PY{n+na}{name=}\\PY{l+s}{\\PYZdq{}units\\PYZdq{}} \\PY{n+na}{type=}\\PY{l+s}{\\PYZdq{}String\\PYZdq{}} \\PY{n+na}{value=}\\PY{l+s}{\\PYZdq{}hours\\PYZdq{}}\\PY{n+nt}{\\PYZgt{}}\\PY{n+nt}{\\PYZlt{}/attribute\\PYZgt{}}\n", "\t\t\\PY{n+nt}{\\PYZlt{}values}\\PY{n+nt}{\\PYZgt{}}6 18\\PY{n+nt}{\\PYZlt{}/values\\PYZgt{}}\n", "\t\\PY{n+nt}{\\PYZlt{}/variable\\PYZgt{}}\n", "\t\\PY{n+nt}{\\PYZlt{}remove} \\PY{n+na}{name=}\\PY{l+s}{\\PYZdq{}Temp\\PYZdq{}} \\PY{n+na}{type=}\\PY{l+s}{\\PYZdq{}variable\\PYZdq{}}\\PY{n+nt}{\\PYZgt{}}\\PY{n+nt}{\\PYZlt{}/remove\\PYZgt{}}\n", "\t\\PY{n+nt}{\\PYZlt{}remove} \\PY{n+na}{name=}\\PY{l+s}{\\PYZdq{}title\\PYZdq{}} \\PY{n+na}{type=}\\PY{l+s}{\\PYZdq{}attribute\\PYZdq{}}\\PY{n+nt}{\\PYZgt{}}\\PY{n+nt}{\\PYZlt{}/remove\\PYZgt{}}\n", "\\PY{n+nt}{\\PYZlt{}/netcdf\\PYZgt{}}\n", "\\end{Verbatim}\n" ], "text/plain": [ "\n", "\n", "\t\n", "\t\n", "\t\n", "\t\n", "\t\n", "\t\n", "\t\t\n", "\t\t\n", "\t\n", "\t\n", "\t\t\n", "\t\t\n", "\t\t\n", "\t\n", "\t\n", "\t\t\n", "\t\t41.0 40.0 39.0\n", "\t\n", "\t\n", "\t\t\n", "\t\t-109.0 -107.0 -105.0 -103.0\n", "\t\n", "\t\n", "\t\t\n", "\t\t6 18\n", "\t\n", "\t\n", "\t\n", "" ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" } ], "source": [ "nc.add_dataset_attribute(key='Conventions', value='CF-2.0')\n", "Code(repr(nc), language=\"XML\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Rename a global attribute" ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
<?xml version="1.0" encoding="utf-8"?>\n",
       "<netcdf location="nc/example1.nc" xmlns="http://www.unidata.ucar.edu/namespaces/netcdf/ncml-2.2">\n",
       "\t<dimension name="time" length="2" isUnlimited="true"></dimension>\n",
       "\t<dimension name="lat" length="3"></dimension>\n",
       "\t<dimension name="lon" length="4"></dimension>\n",
       "\t<attribute name="title" type="String" value="Example Data"></attribute>\n",
       "\t<attribute name="Conventions" type="String" value="CF-2.0"></attribute>\n",
       "\t<attribute name="source">\n",
       "\t\t<orgName>Source</orgName>\n",
       "\t</attribute>\n",
       "\t<variable name="rh" shape="time lat lon" type="int">\n",
       "\t\t<attribute name="long_name" type="String" value="relative humidity"></attribute>\n",
       "\t\t<attribute name="units" type="String" value="percent"></attribute>\n",
       "\t</variable>\n",
       "\t<variable name="Temp" shape="time lat lon" type="double" orgName="T">\n",
       "\t\t<attribute name="long_name" type="String" value="surface temperature"></attribute>\n",
       "\t\t<attribute name="units" type="String" value="C"></attribute>\n",
       "\t\t<remove name="units" type="attribute"></remove>\n",
       "\t</variable>\n",
       "\t<variable name="lat" shape="lat" type="float">\n",
       "\t\t<attribute name="units" type="String" value="degrees_north"></attribute>\n",
       "\t\t<values>41.0 40.0 39.0</values>\n",
       "\t</variable>\n",
       "\t<variable name="lon" shape="lon" type="float">\n",
       "\t\t<attribute name="units" type="String" value="degrees_east"></attribute>\n",
       "\t\t<values>-109.0 -107.0 -105.0 -103.0</values>\n",
       "\t</variable>\n",
       "\t<variable name="time" shape="time" type="int">\n",
       "\t\t<attribute name="units" type="String" value="hours"></attribute>\n",
       "\t\t<values>6 18</values>\n",
       "\t</variable>\n",
       "\t<remove name="Temp" type="variable"></remove>\n",
       "\t<remove name="title" type="attribute"></remove>\n",
       "</netcdf>\n",
       "
\n" ], "text/latex": [ "\\begin{Verbatim}[commandchars=\\\\\\{\\}]\n", "\\PY{c+cp}{\\PYZlt{}?xml version=\\PYZdq{}1.0\\PYZdq{} encoding=\\PYZdq{}utf\\PYZhy{}8\\PYZdq{}?\\PYZgt{}}\n", "\\PY{n+nt}{\\PYZlt{}netcdf} \\PY{n+na}{location=}\\PY{l+s}{\\PYZdq{}nc/example1.nc\\PYZdq{}} \\PY{n+na}{xmlns=}\\PY{l+s}{\\PYZdq{}http://www.unidata.ucar.edu/namespaces/netcdf/ncml\\PYZhy{}2.2\\PYZdq{}}\\PY{n+nt}{\\PYZgt{}}\n", "\t\\PY{n+nt}{\\PYZlt{}dimension} \\PY{n+na}{name=}\\PY{l+s}{\\PYZdq{}time\\PYZdq{}} \\PY{n+na}{length=}\\PY{l+s}{\\PYZdq{}2\\PYZdq{}} \\PY{n+na}{isUnlimited=}\\PY{l+s}{\\PYZdq{}true\\PYZdq{}}\\PY{n+nt}{\\PYZgt{}}\\PY{n+nt}{\\PYZlt{}/dimension\\PYZgt{}}\n", "\t\\PY{n+nt}{\\PYZlt{}dimension} \\PY{n+na}{name=}\\PY{l+s}{\\PYZdq{}lat\\PYZdq{}} \\PY{n+na}{length=}\\PY{l+s}{\\PYZdq{}3\\PYZdq{}}\\PY{n+nt}{\\PYZgt{}}\\PY{n+nt}{\\PYZlt{}/dimension\\PYZgt{}}\n", "\t\\PY{n+nt}{\\PYZlt{}dimension} \\PY{n+na}{name=}\\PY{l+s}{\\PYZdq{}lon\\PYZdq{}} \\PY{n+na}{length=}\\PY{l+s}{\\PYZdq{}4\\PYZdq{}}\\PY{n+nt}{\\PYZgt{}}\\PY{n+nt}{\\PYZlt{}/dimension\\PYZgt{}}\n", "\t\\PY{n+nt}{\\PYZlt{}attribute} \\PY{n+na}{name=}\\PY{l+s}{\\PYZdq{}title\\PYZdq{}} \\PY{n+na}{type=}\\PY{l+s}{\\PYZdq{}String\\PYZdq{}} \\PY{n+na}{value=}\\PY{l+s}{\\PYZdq{}Example Data\\PYZdq{}}\\PY{n+nt}{\\PYZgt{}}\\PY{n+nt}{\\PYZlt{}/attribute\\PYZgt{}}\n", "\t\\PY{n+nt}{\\PYZlt{}attribute} \\PY{n+na}{name=}\\PY{l+s}{\\PYZdq{}Conventions\\PYZdq{}} \\PY{n+na}{type=}\\PY{l+s}{\\PYZdq{}String\\PYZdq{}} \\PY{n+na}{value=}\\PY{l+s}{\\PYZdq{}CF\\PYZhy{}2.0\\PYZdq{}}\\PY{n+nt}{\\PYZgt{}}\\PY{n+nt}{\\PYZlt{}/attribute\\PYZgt{}}\n", "\t\\PY{n+nt}{\\PYZlt{}attribute} \\PY{n+na}{name=}\\PY{l+s}{\\PYZdq{}source\\PYZdq{}}\\PY{n+nt}{\\PYZgt{}}\n", "\t\t\\PY{n+nt}{\\PYZlt{}orgName}\\PY{n+nt}{\\PYZgt{}}Source\\PY{n+nt}{\\PYZlt{}/orgName\\PYZgt{}}\n", "\t\\PY{n+nt}{\\PYZlt{}/attribute\\PYZgt{}}\n", "\t\\PY{n+nt}{\\PYZlt{}variable} \\PY{n+na}{name=}\\PY{l+s}{\\PYZdq{}rh\\PYZdq{}} \\PY{n+na}{shape=}\\PY{l+s}{\\PYZdq{}time lat lon\\PYZdq{}} \\PY{n+na}{type=}\\PY{l+s}{\\PYZdq{}int\\PYZdq{}}\\PY{n+nt}{\\PYZgt{}}\n", "\t\t\\PY{n+nt}{\\PYZlt{}attribute} \\PY{n+na}{name=}\\PY{l+s}{\\PYZdq{}long\\PYZus{}name\\PYZdq{}} \\PY{n+na}{type=}\\PY{l+s}{\\PYZdq{}String\\PYZdq{}} \\PY{n+na}{value=}\\PY{l+s}{\\PYZdq{}relative humidity\\PYZdq{}}\\PY{n+nt}{\\PYZgt{}}\\PY{n+nt}{\\PYZlt{}/attribute\\PYZgt{}}\n", "\t\t\\PY{n+nt}{\\PYZlt{}attribute} \\PY{n+na}{name=}\\PY{l+s}{\\PYZdq{}units\\PYZdq{}} \\PY{n+na}{type=}\\PY{l+s}{\\PYZdq{}String\\PYZdq{}} \\PY{n+na}{value=}\\PY{l+s}{\\PYZdq{}percent\\PYZdq{}}\\PY{n+nt}{\\PYZgt{}}\\PY{n+nt}{\\PYZlt{}/attribute\\PYZgt{}}\n", "\t\\PY{n+nt}{\\PYZlt{}/variable\\PYZgt{}}\n", "\t\\PY{n+nt}{\\PYZlt{}variable} \\PY{n+na}{name=}\\PY{l+s}{\\PYZdq{}Temp\\PYZdq{}} \\PY{n+na}{shape=}\\PY{l+s}{\\PYZdq{}time lat lon\\PYZdq{}} \\PY{n+na}{type=}\\PY{l+s}{\\PYZdq{}double\\PYZdq{}} \\PY{n+na}{orgName=}\\PY{l+s}{\\PYZdq{}T\\PYZdq{}}\\PY{n+nt}{\\PYZgt{}}\n", "\t\t\\PY{n+nt}{\\PYZlt{}attribute} \\PY{n+na}{name=}\\PY{l+s}{\\PYZdq{}long\\PYZus{}name\\PYZdq{}} \\PY{n+na}{type=}\\PY{l+s}{\\PYZdq{}String\\PYZdq{}} \\PY{n+na}{value=}\\PY{l+s}{\\PYZdq{}surface temperature\\PYZdq{}}\\PY{n+nt}{\\PYZgt{}}\\PY{n+nt}{\\PYZlt{}/attribute\\PYZgt{}}\n", "\t\t\\PY{n+nt}{\\PYZlt{}attribute} \\PY{n+na}{name=}\\PY{l+s}{\\PYZdq{}units\\PYZdq{}} \\PY{n+na}{type=}\\PY{l+s}{\\PYZdq{}String\\PYZdq{}} \\PY{n+na}{value=}\\PY{l+s}{\\PYZdq{}C\\PYZdq{}}\\PY{n+nt}{\\PYZgt{}}\\PY{n+nt}{\\PYZlt{}/attribute\\PYZgt{}}\n", "\t\t\\PY{n+nt}{\\PYZlt{}remove} \\PY{n+na}{name=}\\PY{l+s}{\\PYZdq{}units\\PYZdq{}} \\PY{n+na}{type=}\\PY{l+s}{\\PYZdq{}attribute\\PYZdq{}}\\PY{n+nt}{\\PYZgt{}}\\PY{n+nt}{\\PYZlt{}/remove\\PYZgt{}}\n", "\t\\PY{n+nt}{\\PYZlt{}/variable\\PYZgt{}}\n", "\t\\PY{n+nt}{\\PYZlt{}variable} \\PY{n+na}{name=}\\PY{l+s}{\\PYZdq{}lat\\PYZdq{}} \\PY{n+na}{shape=}\\PY{l+s}{\\PYZdq{}lat\\PYZdq{}} \\PY{n+na}{type=}\\PY{l+s}{\\PYZdq{}float\\PYZdq{}}\\PY{n+nt}{\\PYZgt{}}\n", "\t\t\\PY{n+nt}{\\PYZlt{}attribute} \\PY{n+na}{name=}\\PY{l+s}{\\PYZdq{}units\\PYZdq{}} \\PY{n+na}{type=}\\PY{l+s}{\\PYZdq{}String\\PYZdq{}} \\PY{n+na}{value=}\\PY{l+s}{\\PYZdq{}degrees\\PYZus{}north\\PYZdq{}}\\PY{n+nt}{\\PYZgt{}}\\PY{n+nt}{\\PYZlt{}/attribute\\PYZgt{}}\n", "\t\t\\PY{n+nt}{\\PYZlt{}values}\\PY{n+nt}{\\PYZgt{}}41.0 40.0 39.0\\PY{n+nt}{\\PYZlt{}/values\\PYZgt{}}\n", "\t\\PY{n+nt}{\\PYZlt{}/variable\\PYZgt{}}\n", "\t\\PY{n+nt}{\\PYZlt{}variable} \\PY{n+na}{name=}\\PY{l+s}{\\PYZdq{}lon\\PYZdq{}} \\PY{n+na}{shape=}\\PY{l+s}{\\PYZdq{}lon\\PYZdq{}} \\PY{n+na}{type=}\\PY{l+s}{\\PYZdq{}float\\PYZdq{}}\\PY{n+nt}{\\PYZgt{}}\n", "\t\t\\PY{n+nt}{\\PYZlt{}attribute} \\PY{n+na}{name=}\\PY{l+s}{\\PYZdq{}units\\PYZdq{}} \\PY{n+na}{type=}\\PY{l+s}{\\PYZdq{}String\\PYZdq{}} \\PY{n+na}{value=}\\PY{l+s}{\\PYZdq{}degrees\\PYZus{}east\\PYZdq{}}\\PY{n+nt}{\\PYZgt{}}\\PY{n+nt}{\\PYZlt{}/attribute\\PYZgt{}}\n", "\t\t\\PY{n+nt}{\\PYZlt{}values}\\PY{n+nt}{\\PYZgt{}}\\PYZhy{}109.0 \\PYZhy{}107.0 \\PYZhy{}105.0 \\PYZhy{}103.0\\PY{n+nt}{\\PYZlt{}/values\\PYZgt{}}\n", "\t\\PY{n+nt}{\\PYZlt{}/variable\\PYZgt{}}\n", "\t\\PY{n+nt}{\\PYZlt{}variable} \\PY{n+na}{name=}\\PY{l+s}{\\PYZdq{}time\\PYZdq{}} \\PY{n+na}{shape=}\\PY{l+s}{\\PYZdq{}time\\PYZdq{}} \\PY{n+na}{type=}\\PY{l+s}{\\PYZdq{}int\\PYZdq{}}\\PY{n+nt}{\\PYZgt{}}\n", "\t\t\\PY{n+nt}{\\PYZlt{}attribute} \\PY{n+na}{name=}\\PY{l+s}{\\PYZdq{}units\\PYZdq{}} \\PY{n+na}{type=}\\PY{l+s}{\\PYZdq{}String\\PYZdq{}} \\PY{n+na}{value=}\\PY{l+s}{\\PYZdq{}hours\\PYZdq{}}\\PY{n+nt}{\\PYZgt{}}\\PY{n+nt}{\\PYZlt{}/attribute\\PYZgt{}}\n", "\t\t\\PY{n+nt}{\\PYZlt{}values}\\PY{n+nt}{\\PYZgt{}}6 18\\PY{n+nt}{\\PYZlt{}/values\\PYZgt{}}\n", "\t\\PY{n+nt}{\\PYZlt{}/variable\\PYZgt{}}\n", "\t\\PY{n+nt}{\\PYZlt{}remove} \\PY{n+na}{name=}\\PY{l+s}{\\PYZdq{}Temp\\PYZdq{}} \\PY{n+na}{type=}\\PY{l+s}{\\PYZdq{}variable\\PYZdq{}}\\PY{n+nt}{\\PYZgt{}}\\PY{n+nt}{\\PYZlt{}/remove\\PYZgt{}}\n", "\t\\PY{n+nt}{\\PYZlt{}remove} \\PY{n+na}{name=}\\PY{l+s}{\\PYZdq{}title\\PYZdq{}} \\PY{n+na}{type=}\\PY{l+s}{\\PYZdq{}attribute\\PYZdq{}}\\PY{n+nt}{\\PYZgt{}}\\PY{n+nt}{\\PYZlt{}/remove\\PYZgt{}}\n", "\\PY{n+nt}{\\PYZlt{}/netcdf\\PYZgt{}}\n", "\\end{Verbatim}\n" ], "text/plain": [ "\n", "\n", "\t\n", "\t\n", "\t\n", "\t\n", "\t\n", "\t\n", "\t\tSource\n", "\t\n", "\t\n", "\t\t\n", "\t\t\n", "\t\n", "\t\n", "\t\t\n", "\t\t\n", "\t\t\n", "\t\n", "\t\n", "\t\t\n", "\t\t41.0 40.0 39.0\n", "\t\n", "\t\n", "\t\t\n", "\t\t-109.0 -107.0 -105.0 -103.0\n", "\t\n", "\t\n", "\t\t\n", "\t\t6 18\n", "\t\n", "\t\n", "\t\n", "" ] }, "execution_count": 9, "metadata": {}, "output_type": "execute_result" } ], "source": [ "nc.rename_dataset_attribute(old_name=\"Source\", new_name=\"source\")\n", "Code(repr(nc), language=\"XML\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Add a variable attribute" ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
<?xml version="1.0" encoding="utf-8"?>\n",
       "<netcdf location="nc/example1.nc" xmlns="http://www.unidata.ucar.edu/namespaces/netcdf/ncml-2.2">\n",
       "\t<dimension name="time" length="2" isUnlimited="true"></dimension>\n",
       "\t<dimension name="lat" length="3"></dimension>\n",
       "\t<dimension name="lon" length="4"></dimension>\n",
       "\t<attribute name="title" type="String" value="Example Data"></attribute>\n",
       "\t<attribute name="Conventions" type="String" value="CF-2.0"></attribute>\n",
       "\t<attribute name="source">\n",
       "\t\t<orgName>Source</orgName>\n",
       "\t</attribute>\n",
       "\t<variable name="rh" shape="time lat lon" type="int">\n",
       "\t\t<attribute name="long_name" type="String" value="relative humidity"></attribute>\n",
       "\t\t<attribute name="units" type="String" value="percent"></attribute>\n",
       "\t</variable>\n",
       "\t<variable name="Temp" shape="time lat lon" type="double" orgName="T">\n",
       "\t\t<attribute name="long_name" type="String" value="surface temperature"></attribute>\n",
       "\t\t<attribute name="units" type="String" value="Kelvin"></attribute>\n",
       "\t\t<attribute name="Fill_value" type="String" value="-999999999.0"></attribute>\n",
       "\t\t<remove name="units" type="attribute"></remove>\n",
       "\t</variable>\n",
       "\t<variable name="lat" shape="lat" type="float">\n",
       "\t\t<attribute name="units" type="String" value="degrees_north"></attribute>\n",
       "\t\t<values>41.0 40.0 39.0</values>\n",
       "\t</variable>\n",
       "\t<variable name="lon" shape="lon" type="float">\n",
       "\t\t<attribute name="units" type="String" value="degrees_east"></attribute>\n",
       "\t\t<values>-109.0 -107.0 -105.0 -103.0</values>\n",
       "\t</variable>\n",
       "\t<variable name="time" shape="time" type="int">\n",
       "\t\t<attribute name="units" type="String" value="hours"></attribute>\n",
       "\t\t<values>6 18</values>\n",
       "\t</variable>\n",
       "\t<remove name="Temp" type="variable"></remove>\n",
       "\t<remove name="title" type="attribute"></remove>\n",
       "</netcdf>\n",
       "
\n" ], "text/latex": [ "\\begin{Verbatim}[commandchars=\\\\\\{\\}]\n", "\\PY{c+cp}{\\PYZlt{}?xml version=\\PYZdq{}1.0\\PYZdq{} encoding=\\PYZdq{}utf\\PYZhy{}8\\PYZdq{}?\\PYZgt{}}\n", "\\PY{n+nt}{\\PYZlt{}netcdf} \\PY{n+na}{location=}\\PY{l+s}{\\PYZdq{}nc/example1.nc\\PYZdq{}} \\PY{n+na}{xmlns=}\\PY{l+s}{\\PYZdq{}http://www.unidata.ucar.edu/namespaces/netcdf/ncml\\PYZhy{}2.2\\PYZdq{}}\\PY{n+nt}{\\PYZgt{}}\n", "\t\\PY{n+nt}{\\PYZlt{}dimension} \\PY{n+na}{name=}\\PY{l+s}{\\PYZdq{}time\\PYZdq{}} \\PY{n+na}{length=}\\PY{l+s}{\\PYZdq{}2\\PYZdq{}} \\PY{n+na}{isUnlimited=}\\PY{l+s}{\\PYZdq{}true\\PYZdq{}}\\PY{n+nt}{\\PYZgt{}}\\PY{n+nt}{\\PYZlt{}/dimension\\PYZgt{}}\n", "\t\\PY{n+nt}{\\PYZlt{}dimension} \\PY{n+na}{name=}\\PY{l+s}{\\PYZdq{}lat\\PYZdq{}} \\PY{n+na}{length=}\\PY{l+s}{\\PYZdq{}3\\PYZdq{}}\\PY{n+nt}{\\PYZgt{}}\\PY{n+nt}{\\PYZlt{}/dimension\\PYZgt{}}\n", "\t\\PY{n+nt}{\\PYZlt{}dimension} \\PY{n+na}{name=}\\PY{l+s}{\\PYZdq{}lon\\PYZdq{}} \\PY{n+na}{length=}\\PY{l+s}{\\PYZdq{}4\\PYZdq{}}\\PY{n+nt}{\\PYZgt{}}\\PY{n+nt}{\\PYZlt{}/dimension\\PYZgt{}}\n", "\t\\PY{n+nt}{\\PYZlt{}attribute} \\PY{n+na}{name=}\\PY{l+s}{\\PYZdq{}title\\PYZdq{}} \\PY{n+na}{type=}\\PY{l+s}{\\PYZdq{}String\\PYZdq{}} \\PY{n+na}{value=}\\PY{l+s}{\\PYZdq{}Example Data\\PYZdq{}}\\PY{n+nt}{\\PYZgt{}}\\PY{n+nt}{\\PYZlt{}/attribute\\PYZgt{}}\n", "\t\\PY{n+nt}{\\PYZlt{}attribute} \\PY{n+na}{name=}\\PY{l+s}{\\PYZdq{}Conventions\\PYZdq{}} \\PY{n+na}{type=}\\PY{l+s}{\\PYZdq{}String\\PYZdq{}} \\PY{n+na}{value=}\\PY{l+s}{\\PYZdq{}CF\\PYZhy{}2.0\\PYZdq{}}\\PY{n+nt}{\\PYZgt{}}\\PY{n+nt}{\\PYZlt{}/attribute\\PYZgt{}}\n", "\t\\PY{n+nt}{\\PYZlt{}attribute} \\PY{n+na}{name=}\\PY{l+s}{\\PYZdq{}source\\PYZdq{}}\\PY{n+nt}{\\PYZgt{}}\n", "\t\t\\PY{n+nt}{\\PYZlt{}orgName}\\PY{n+nt}{\\PYZgt{}}Source\\PY{n+nt}{\\PYZlt{}/orgName\\PYZgt{}}\n", "\t\\PY{n+nt}{\\PYZlt{}/attribute\\PYZgt{}}\n", "\t\\PY{n+nt}{\\PYZlt{}variable} \\PY{n+na}{name=}\\PY{l+s}{\\PYZdq{}rh\\PYZdq{}} \\PY{n+na}{shape=}\\PY{l+s}{\\PYZdq{}time lat lon\\PYZdq{}} \\PY{n+na}{type=}\\PY{l+s}{\\PYZdq{}int\\PYZdq{}}\\PY{n+nt}{\\PYZgt{}}\n", "\t\t\\PY{n+nt}{\\PYZlt{}attribute} \\PY{n+na}{name=}\\PY{l+s}{\\PYZdq{}long\\PYZus{}name\\PYZdq{}} \\PY{n+na}{type=}\\PY{l+s}{\\PYZdq{}String\\PYZdq{}} \\PY{n+na}{value=}\\PY{l+s}{\\PYZdq{}relative humidity\\PYZdq{}}\\PY{n+nt}{\\PYZgt{}}\\PY{n+nt}{\\PYZlt{}/attribute\\PYZgt{}}\n", "\t\t\\PY{n+nt}{\\PYZlt{}attribute} \\PY{n+na}{name=}\\PY{l+s}{\\PYZdq{}units\\PYZdq{}} \\PY{n+na}{type=}\\PY{l+s}{\\PYZdq{}String\\PYZdq{}} \\PY{n+na}{value=}\\PY{l+s}{\\PYZdq{}percent\\PYZdq{}}\\PY{n+nt}{\\PYZgt{}}\\PY{n+nt}{\\PYZlt{}/attribute\\PYZgt{}}\n", "\t\\PY{n+nt}{\\PYZlt{}/variable\\PYZgt{}}\n", "\t\\PY{n+nt}{\\PYZlt{}variable} \\PY{n+na}{name=}\\PY{l+s}{\\PYZdq{}Temp\\PYZdq{}} \\PY{n+na}{shape=}\\PY{l+s}{\\PYZdq{}time lat lon\\PYZdq{}} \\PY{n+na}{type=}\\PY{l+s}{\\PYZdq{}double\\PYZdq{}} \\PY{n+na}{orgName=}\\PY{l+s}{\\PYZdq{}T\\PYZdq{}}\\PY{n+nt}{\\PYZgt{}}\n", "\t\t\\PY{n+nt}{\\PYZlt{}attribute} \\PY{n+na}{name=}\\PY{l+s}{\\PYZdq{}long\\PYZus{}name\\PYZdq{}} \\PY{n+na}{type=}\\PY{l+s}{\\PYZdq{}String\\PYZdq{}} \\PY{n+na}{value=}\\PY{l+s}{\\PYZdq{}surface temperature\\PYZdq{}}\\PY{n+nt}{\\PYZgt{}}\\PY{n+nt}{\\PYZlt{}/attribute\\PYZgt{}}\n", "\t\t\\PY{n+nt}{\\PYZlt{}attribute} \\PY{n+na}{name=}\\PY{l+s}{\\PYZdq{}units\\PYZdq{}} \\PY{n+na}{type=}\\PY{l+s}{\\PYZdq{}String\\PYZdq{}} \\PY{n+na}{value=}\\PY{l+s}{\\PYZdq{}Kelvin\\PYZdq{}}\\PY{n+nt}{\\PYZgt{}}\\PY{n+nt}{\\PYZlt{}/attribute\\PYZgt{}}\n", "\t\t\\PY{n+nt}{\\PYZlt{}attribute} \\PY{n+na}{name=}\\PY{l+s}{\\PYZdq{}Fill\\PYZus{}value\\PYZdq{}} \\PY{n+na}{type=}\\PY{l+s}{\\PYZdq{}String\\PYZdq{}} \\PY{n+na}{value=}\\PY{l+s}{\\PYZdq{}\\PYZhy{}999999999.0\\PYZdq{}}\\PY{n+nt}{\\PYZgt{}}\\PY{n+nt}{\\PYZlt{}/attribute\\PYZgt{}}\n", "\t\t\\PY{n+nt}{\\PYZlt{}remove} \\PY{n+na}{name=}\\PY{l+s}{\\PYZdq{}units\\PYZdq{}} \\PY{n+na}{type=}\\PY{l+s}{\\PYZdq{}attribute\\PYZdq{}}\\PY{n+nt}{\\PYZgt{}}\\PY{n+nt}{\\PYZlt{}/remove\\PYZgt{}}\n", "\t\\PY{n+nt}{\\PYZlt{}/variable\\PYZgt{}}\n", "\t\\PY{n+nt}{\\PYZlt{}variable} \\PY{n+na}{name=}\\PY{l+s}{\\PYZdq{}lat\\PYZdq{}} \\PY{n+na}{shape=}\\PY{l+s}{\\PYZdq{}lat\\PYZdq{}} \\PY{n+na}{type=}\\PY{l+s}{\\PYZdq{}float\\PYZdq{}}\\PY{n+nt}{\\PYZgt{}}\n", "\t\t\\PY{n+nt}{\\PYZlt{}attribute} \\PY{n+na}{name=}\\PY{l+s}{\\PYZdq{}units\\PYZdq{}} \\PY{n+na}{type=}\\PY{l+s}{\\PYZdq{}String\\PYZdq{}} \\PY{n+na}{value=}\\PY{l+s}{\\PYZdq{}degrees\\PYZus{}north\\PYZdq{}}\\PY{n+nt}{\\PYZgt{}}\\PY{n+nt}{\\PYZlt{}/attribute\\PYZgt{}}\n", "\t\t\\PY{n+nt}{\\PYZlt{}values}\\PY{n+nt}{\\PYZgt{}}41.0 40.0 39.0\\PY{n+nt}{\\PYZlt{}/values\\PYZgt{}}\n", "\t\\PY{n+nt}{\\PYZlt{}/variable\\PYZgt{}}\n", "\t\\PY{n+nt}{\\PYZlt{}variable} \\PY{n+na}{name=}\\PY{l+s}{\\PYZdq{}lon\\PYZdq{}} \\PY{n+na}{shape=}\\PY{l+s}{\\PYZdq{}lon\\PYZdq{}} \\PY{n+na}{type=}\\PY{l+s}{\\PYZdq{}float\\PYZdq{}}\\PY{n+nt}{\\PYZgt{}}\n", "\t\t\\PY{n+nt}{\\PYZlt{}attribute} \\PY{n+na}{name=}\\PY{l+s}{\\PYZdq{}units\\PYZdq{}} \\PY{n+na}{type=}\\PY{l+s}{\\PYZdq{}String\\PYZdq{}} \\PY{n+na}{value=}\\PY{l+s}{\\PYZdq{}degrees\\PYZus{}east\\PYZdq{}}\\PY{n+nt}{\\PYZgt{}}\\PY{n+nt}{\\PYZlt{}/attribute\\PYZgt{}}\n", "\t\t\\PY{n+nt}{\\PYZlt{}values}\\PY{n+nt}{\\PYZgt{}}\\PYZhy{}109.0 \\PYZhy{}107.0 \\PYZhy{}105.0 \\PYZhy{}103.0\\PY{n+nt}{\\PYZlt{}/values\\PYZgt{}}\n", "\t\\PY{n+nt}{\\PYZlt{}/variable\\PYZgt{}}\n", "\t\\PY{n+nt}{\\PYZlt{}variable} \\PY{n+na}{name=}\\PY{l+s}{\\PYZdq{}time\\PYZdq{}} \\PY{n+na}{shape=}\\PY{l+s}{\\PYZdq{}time\\PYZdq{}} \\PY{n+na}{type=}\\PY{l+s}{\\PYZdq{}int\\PYZdq{}}\\PY{n+nt}{\\PYZgt{}}\n", "\t\t\\PY{n+nt}{\\PYZlt{}attribute} \\PY{n+na}{name=}\\PY{l+s}{\\PYZdq{}units\\PYZdq{}} \\PY{n+na}{type=}\\PY{l+s}{\\PYZdq{}String\\PYZdq{}} \\PY{n+na}{value=}\\PY{l+s}{\\PYZdq{}hours\\PYZdq{}}\\PY{n+nt}{\\PYZgt{}}\\PY{n+nt}{\\PYZlt{}/attribute\\PYZgt{}}\n", "\t\t\\PY{n+nt}{\\PYZlt{}values}\\PY{n+nt}{\\PYZgt{}}6 18\\PY{n+nt}{\\PYZlt{}/values\\PYZgt{}}\n", "\t\\PY{n+nt}{\\PYZlt{}/variable\\PYZgt{}}\n", "\t\\PY{n+nt}{\\PYZlt{}remove} \\PY{n+na}{name=}\\PY{l+s}{\\PYZdq{}Temp\\PYZdq{}} \\PY{n+na}{type=}\\PY{l+s}{\\PYZdq{}variable\\PYZdq{}}\\PY{n+nt}{\\PYZgt{}}\\PY{n+nt}{\\PYZlt{}/remove\\PYZgt{}}\n", "\t\\PY{n+nt}{\\PYZlt{}remove} \\PY{n+na}{name=}\\PY{l+s}{\\PYZdq{}title\\PYZdq{}} \\PY{n+na}{type=}\\PY{l+s}{\\PYZdq{}attribute\\PYZdq{}}\\PY{n+nt}{\\PYZgt{}}\\PY{n+nt}{\\PYZlt{}/remove\\PYZgt{}}\n", "\\PY{n+nt}{\\PYZlt{}/netcdf\\PYZgt{}}\n", "\\end{Verbatim}\n" ], "text/plain": [ "\n", "\n", "\t\n", "\t\n", "\t\n", "\t\n", "\t\n", "\t\n", "\t\tSource\n", "\t\n", "\t\n", "\t\t\n", "\t\t\n", "\t\n", "\t\n", "\t\t\n", "\t\t\n", "\t\t\n", "\t\t\n", "\t\n", "\t\n", "\t\t\n", "\t\t41.0 40.0 39.0\n", "\t\n", "\t\n", "\t\t\n", "\t\t-109.0 -107.0 -105.0 -103.0\n", "\t\n", "\t\n", "\t\t\n", "\t\t6 18\n", "\t\n", "\t\n", "\t\n", "" ] }, "execution_count": 10, "metadata": {}, "output_type": "execute_result" } ], "source": [ "nc.add_variable_attribute(variable='Temp', key='units', value='Kelvin')\n", "nc.add_variable_attribute(variable='Temp', key='Fill_value', value=-999999999.)\n", "Code(repr(nc), language=\"XML\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Write Dataset back to an ncml file" ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [], "source": [ "import tempfile\n", "tmp_fn = Path(tempfile.mkdtemp()) / \"exercise1_modified.ncml\"\n", "nc.to_ncml(tmp_fn)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Export metadata to a dictionary\n", "`Dataset` has a `to_cf_dict` method that returns a dictionary following the [CF-JSON](https://cf-json.org/specification) specifications. The output may not always be fully compliant with the CF-JSON specification because NcML files used to create virtual datasets do not always include all information that CF-JSON expects.\n" ] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "OrderedDict([('@location', 'nc/example1.nc'),\n", " ('@xmlns',\n", " {'': 'http://www.unidata.ucar.edu/namespaces/netcdf/ncml-2.2'}),\n", " ('dimensions',\n", " OrderedDict([('time', 2), ('lat', 3), ('lon', 4)])),\n", " ('attributes',\n", " OrderedDict([('title', 'Example Data'),\n", " ('Conventions', 'CF-2.0'),\n", " ('source', None)])),\n", " ('variables',\n", " OrderedDict([('lat',\n", " OrderedDict([('shape', ['lat']),\n", " ('type', 'float'),\n", " ('attributes',\n", " OrderedDict([('units',\n", " 'degrees_north')])),\n", " ('data', [41.0, 40.0, 39.0])])),\n", " ('lon',\n", " OrderedDict([('shape', ['lon']),\n", " ('type', 'float'),\n", " ('attributes',\n", " OrderedDict([('units',\n", " 'degrees_east')])),\n", " ('data',\n", " [-109.0, -107.0, -105.0, -103.0])])),\n", " ('time',\n", " OrderedDict([('shape', ['time']),\n", " ('type', 'int'),\n", " ('attributes',\n", " OrderedDict([('units', 'hours')])),\n", " ('data', [6, 18])])),\n", " ('rh',\n", " OrderedDict([('shape', ['time', 'lat', 'lon']),\n", " ('type', 'int'),\n", " ('attributes',\n", " OrderedDict([('long_name',\n", " 'relative humidity'),\n", " ('units',\n", " 'percent')]))])),\n", " ('Temp',\n", " OrderedDict([('shape', ['time', 'lat', 'lon']),\n", " ('type', 'double'),\n", " ('attributes',\n", " OrderedDict([('long_name',\n", " 'surface temperature'),\n", " ('units', 'Kelvin'),\n", " ('Fill_value',\n", " -999999999.0)]))]))]))])" ] }, "execution_count": 12, "metadata": {}, "output_type": "execute_result" } ], "source": [ "nc.to_cf_dict()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Open an NcML document as an ``xarray.Dataset``\n", "\n", "``xncml`` can parse NcML instructions to create an ``xarray.Dataset``. Calling the `close` method on the returned dataset will close all underlying netCDF files referred to by the NcML document. Note that a few NcML instructions are not yet supported." ] }, { "cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "
<xarray.Dataset>\n",
       "Dimensions:  (time: 2, lat: 3, lon: 4)\n",
       "Coordinates:\n",
       "  * lat      (lat) float32 41.0 40.0 39.0\n",
       "  * lon      (lon) float32 -109.0 -107.0 -105.0 -103.0\n",
       "  * time     (time) int32 6 18\n",
       "Data variables:\n",
       "    rh       (time, lat, lon) int32 1 2 3 4 5 6 7 8 ... 25 26 27 28 29 30 31 32\n",
       "    T        (time, lat, lon) float64 1.0 2.0 3.0 4.0 2.0 ... 7.5 15.0 22.5 30.0\n",
       "Attributes:\n",
       "    title:    Example Data
" ], "text/plain": [ "\n", "Dimensions: (time: 2, lat: 3, lon: 4)\n", "Coordinates:\n", " * lat (lat) float32 41.0 40.0 39.0\n", " * lon (lon) float32 -109.0 -107.0 -105.0 -103.0\n", " * time (time) int32 6 18\n", "Data variables:\n", " rh (time, lat, lon) int32 1 2 3 4 5 6 7 8 ... 25 26 27 28 29 30 31 32\n", " T (time, lat, lon) float64 1.0 2.0 3.0 4.0 2.0 ... 7.5 15.0 22.5 30.0\n", "Attributes:\n", " title: Example Data" ] }, "execution_count": 13, "metadata": {}, "output_type": "execute_result" } ], "source": [ "xncml.open_ncml(fn)" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3 (ipykernel)", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.10.4" } }, "nbformat": 4, "nbformat_minor": 2 }