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

3

我想在以下情况下复制NetCDF文件:

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

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

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

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

也许这只是简单地复制原始文件并在适当的位置修改副本?或者打开原始NetCDF并使用copy模块创建第二个NetCDF?

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


1
在我看来,nccopy 的唯一优点是可以更改 NetCDF 格式(classic、4 等)?这是必要的吗?如果不是,为什么不直接复制文件(使用例如 shutil)?至于更改第二个文件;你提到这是“可行的”,但你正在寻找更好的方法。你目前正在使用的“可行解决方案”是什么? - Bart
这样做很繁琐,需要逐个复制所有尺寸、属性和变量到第二个文件中。我经常会忘记某些内容,最终得到的文件几乎是相同的,当我需要做差异地图或类似的事情时,总会出现一些不一致的地方,我需要回到原点去修复一些小问题。我正在尝试采用另一种方法来减少这种烦恼。 - James Adams
2个回答

4

使用NCO,就会变成这样:

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

你可以使用-v来控制是否只想要new_var和old_var,或者in.nc的所有内容都包含在out.nc中。


3
我将为您提供一个与您尝试做的事情相关的xarray解决方案。 xarray具有“往返”功能,使您能够读/写相同的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')

谢谢!我一直想尝试一下xray,这看起来是一个很好的推动力。感谢您的帮助。 - James Adams

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接