Python/NetCDF4: 如何复制一个NetCDF文件?

Python/NetCDF4: How to duplicate a NetCDF file?

我想在之前复制一个 NetCDF 文件:

a) 更新第二个文件中变量的值,and/or

b) 向第二个文件添加一个新变量,该变量对应于原始变量的结构。

我已经可以做这种复制了,但是我的过程很乏味而且感觉零碎,所以我想知道是否有更优雅、更简单的解决方案。例如,我希望生成的 NetCDF 文件包含与原始 NetCDF 文件一样的所有全局属性、坐标维度、坐标变量和可能的数据变量。

然后我想在第二个 NetCDF 中创建另一个变量,其维度与原始变量之一相同(这也已经可行,但正在寻找更好的方法)。可能我正在寻找的是一种在 Python 脚本中执行 nccopy 功能的方法。 netcdf4 模块中似乎没有这样的功能,但也许我可以使用另一个技巧?

也许这就像复制原始文件并在适当的地方修改副本一样简单?还是打开原来的NetCDF,使用copy模块创建第二个NetCDF?

提前感谢您的任何建议或见解。

我会针对您的尝试提供 xarray 解决方案。 xarray 具有 "round-trip" 能力,允许您 read/write 相同的 netCDF 文件,因此这可能是一个不错的方法。

import xarray as xr

# open your dataset
ds = xr.open_dataset('your_original_file.nc')

# change an existing variable
ds.your_var += 20

# add a new variable
ds['new_var'] = xr.DataArray([1, 2, 3, 4], dims=('new_dim', ))

# write to a new file
ds.to_netcdf('your_new_file.nc')

对于 NCO 这将类似于

ncap2 -s 'new_var=old_var+20' in.nc out.nc

并且您可以使用 -v 来控制您是只希望 new_var 和 old_var,还是 in.nc 的所有内容都在 out.nc.