【问题标题】:Python/NetCDF4: How to duplicate a NetCDF file?Python/NetCDF4:如何复制 NetCDF 文件?
【发布时间】:2016-03-25 09:52:41
【问题描述】:

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

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

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

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

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

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

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

【问题讨论】:

  • 在我看来,nccopy 的唯一优点是您可以更改 NetCDF 格式(经典、4、..)?那有必要吗?如果没有,为什么不简单地复制文件(使用例如shutil)?至于更改第二个文件;您提到这是可行,但您正在寻找更好的方法。您目前使用的可行解决方案是什么?
  • 这是单调乏味的——基本上是将所有维度、属性和变量复制到第二个文件中。我经常设法忘记一些东西并最终得到几乎相似的文件,然后当我需要做差异图或类似的东西时,不可避免地会出现不一致的情况,我需要回溯以修复一些小细节。这是我试图通过另一种方法尽量减少的烦恼。

标签: python netcdf


【解决方案1】:

NCO 会是这样的

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

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

【讨论】:

    【解决方案2】:

    我将为您尝试执行的操作提供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')
    

    【讨论】:

    • 谢谢!一段时间以来,我一直想尝试 X 射线,这看起来是一个很好的推动力。感谢您的帮助。
    猜你喜欢
    • 2016-04-27
    • 2015-10-30
    • 2020-06-12
    • 2012-12-05
    • 2021-03-23
    • 2018-07-08
    • 2015-12-14
    • 1970-01-01
    • 2013-08-10
    相关资源
    最近更新 更多