我强烈建议您使用CDO将文件转换为NetCDF。对.nc文件进行简单处理时,使用CDO或NCO几乎总是最佳选择。以我的经验,当使用合适的运算符时,CDO通常比使用Python或R更安全,更快。
例如:
cdo -f nc import_binary in_grads.ctl out_ncdf.nc
Run Code Online (Sandbox Code Playgroud)
您可以在CDO论坛的某些主题上找到更多有关此的信息:
https://code.zmaw.de/boards/1/topics/1031
https://code.zmaw.de/boards/1/topics/213
PS:CDO提示:链接多个CDO运算符时,请使用-L选项以避免出现段错误,并考虑将虚拟RAM空间(在大多数Linux发行版中为/ dev / shm)用于临时文件,以避免磁盘写入。
您绝对应该使用气候数据运营商(CDO)来执行以下操作:
cdo -f nc import_binary in.ctl out.nc
Run Code Online (Sandbox Code Playgroud)
如果要处理的文件很多,则可能需要编写脚本来处理它们。
例如,我有一个tar文件,其中包含一堆来自COAMPS模型的GrADS文件,当解压缩后会产生121对文件.dat和.cdl文件,其名称如下:
COTC.18L.2012102512.000.ctl
COTC.18L.2012102512.000.dat
COTC.18L.2012102512.001.ctl
COTC.18L.2012102512.001.dat
COTC.18L.2012102512.002.ctl
COTC.18L.2012102512.002.dat
...
Run Code Online (Sandbox Code Playgroud)
所以我写了一个小的bash脚本:
#!/bin/bash
for file in *.ctl
do
fname=${file%.ctl}
cdo -f nc import_binary ${fname}.ctl ${fname}.nc
echo ${fname}.nc
done
Run Code Online (Sandbox Code Playgroud)
将它们全部转换为netcdf。
注意#1:CDO可能很难构建,但是如果您使用Linux或Mac,则可以使用Conda进行安装。
如果尚未安装Conda,请安装Miniconda(免费)。这是如何做:
步骤1。确保您有一个~.condarc,它看起来像这样:
$ more ~/.condarc
channels:
- conda-forge
- defaults
Run Code Online (Sandbox Code Playgroud)
第二步。创建一个自定义CDO环境以运行CDO:
$ conda create --yes -n CDO python=3.6 cdo
$ source activate CDO
Run Code Online (Sandbox Code Playgroud)
第三步。运行nco命令!
注意#2:我还创建了一个NcML文件,以虚拟方式将这些数据聚合到我的thredds数据服务器上。该文件如下所示:
<netcdf xmlns="http://www.unidata.ucar.edu/namespaces/netcdf/ncml-2.2">
<aggregation dimName="time" type="joinExisting">
<scan location="." regExp=".*COTC\.18L\.[0-9]{10}\.[0-9]{3}\.nc$"/>
</aggregation>
</netcdf>
Run Code Online (Sandbox Code Playgroud)
有关设置THREDDS数据服务器以处理此问题的更多信息,请参见https://gis.stackexchange.com/questions/70919/setting-up-thredds-catalogs-for-ocean-model-data。