From 2d17835faf562bafd1e77a311c054271dc6837d7 Mon Sep 17 00:00:00 2001 From: Thomas Nicholas Date: Wed, 30 Nov 2022 13:00:18 -0500 Subject: [PATCH 1/2] example of writing and reading groups to netcdf --- doc/user-guide/io.rst | 66 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 66 insertions(+) diff --git a/doc/user-guide/io.rst b/doc/user-guide/io.rst index c29d87556f8..f2d3c6cc9d9 100644 --- a/doc/user-guide/io.rst +++ b/doc/user-guide/io.rst @@ -162,11 +162,77 @@ To do so, pass a ``group`` keyword argument to the :py:func:`open_dataset` function. The group can be specified as a path-like string, e.g., to access subgroup ``'bar'`` within group ``'foo'`` pass ``'/foo/bar'`` as the ``group`` argument. + In a similar way, the ``group`` keyword argument can be given to the :py:meth:`Dataset.to_netcdf` method to write to a group in a netCDF file. When writing multiple groups in one file, pass ``mode='a'`` to :py:meth:`Dataset.to_netcdf` to ensure that each call does not delete the file. +For example: + +.. ipython:: + :verbatim: + + In [1]: ds1 = xr.Dataset({"a": 0}) + + In [2]: ds2 = xr.Dataset({"b": 1}) + + In [3]: ds1.to_netcdf("file.nc", group="A") + + In [4]: ds2.to_netcdf("file.nc", group="B", mode="a") + +We can verify that two groups have been saved using the ncdump command-line utility. + +.. code:: bash + + $ ncdump file.nc + netcdf file { + + group: A { + variables: + int64 a ; + data: + + a = 0 ; + } // group A + + group: B { + variables: + int64 b ; + data: + + b = 1 ; + } // group B + } + +Either of these groups can be loaded from the file as an independent :py:class:`Dataset` object: + +.. ipython:: + :verbatim: + + In [1]: group1 = xr.open_dataset("file.nc", group="A") + + In [2]: group1 + Out[2]: + + Dimensions: () + Data variables: + a int64 ... + + In [3]: group2 = xr.open_dataset("file.nc", group="B") + + In [4]: group2 + Out[4]: + + Dimensions: () + Data variables: + b int64 ... + +.. note:: + + For native handling of multiple groups with xarray, including I/O, you might be interested in the experimental + `xarray-datatree `_ package. + .. _io.encoding: From 16f485bb4b560630e738903950c9cd430dbccaa8 Mon Sep 17 00:00:00 2001 From: Thomas Nicholas Date: Wed, 30 Nov 2022 13:03:24 -0500 Subject: [PATCH 2/2] whatsnew --- doc/whats-new.rst | 2 ++ 1 file changed, 2 insertions(+) diff --git a/doc/whats-new.rst b/doc/whats-new.rst index 0c9ff5bd1f8..f375a53b28d 100644 --- a/doc/whats-new.rst +++ b/doc/whats-new.rst @@ -66,6 +66,8 @@ Bug fixes Documentation ~~~~~~~~~~~~~ +- Add example of reading and writing individual groups to a single netCDF file to I/O docs page. (:pull:`7338`) + By `Tom Nicholas `_. Internal Changes ~~~~~~~~~~~~~~~~