气象类Python教程 ——netCDF4简介

Python就提供了既能方便快捷地读取nc文件,又能支持数据处理的一个平台。

Python中支持nc数据读写的库有很多,其中scipy和netCDF4较为出名,因为scipy主要还是一些科学计算的函数库,所以这里我们着重介绍netCDF4。

netCDF4的下载地址在:https://pypi.python.org/pypi/netCDF4,它的github主页在https://github.com/Unidata/netcdf4-python,感兴趣的同学可以前去了解关于这个库的更多信息。需要注意的是canopy本身没有包含netCDF4,需要用户自行下载安装,具体方法可以参加之前的教程。

输入:

 

如果没有错误,那就说明安装成功了。不过呢,因为netCDF4包含了很多的函数,通常我们要用到的只有Dataset一个,所以调用的时候请在脚本开头输入:


注意大小写。

 

Dataset函数的作用是用只读或者读写的方式打开nc数据文件。直接来看例子吧~

这里的hgt1973.nc是1973年的日均高度场数据,而我所做的,就是用只读的方式创建了nc文件对象a。到这一步我们就已经完成了nc文件的打开操作,下一步我们可以来查看一下变量:

nc文件对象a有一个属性叫做variable,顾名思义指代的是文件中的变量信息,而变量信息又有一个属性叫做keys,指代了这些变量的名字。通过调用a.varibles.keys()就可以查看该文件中的变量名了。可以发现hgt1973.nc中包含了5个变量,分别为层次、维度、经度和高度场。如果是在Fortran中,知道了变量名我们还需要去查看变量的维数,才能最终确定需要分配的数组空间。不过Python作为一门动态语言是不需要考虑变量维数这一说的:赋值的同时即内存空间的分配。

说到a.variables.keys(),大家是不是觉得很像python的字典呢?所以想要获得对应的变量数值就变得很简单了:

如图,通过直接赋值的方式我们便获得了hgt1973中的变量“level”。实际上除了获得数值,我们还可以查看“level”的其他属性例如:

可以直接将level的基本信息打印到屏幕:

可以查看数据类型:

查看数据名(有时会和变量名不一样):

查看维数:

等等,大家可以按下tab自行查看。

同理,我们也能够直接读取其他变量:

只要读取出来,之后便能够通过python中的其他数据处理过程进行处理了。

不过这个nc文件还相对箱单了一些,我们再来看个复杂一点的:

Wrfinput_d02是一个wrf模式的初始场文件。用过wrf模式的读者应该会知道,我们使用wrf进行数值模拟之前需要在namelist.input中进行大量的参数设置。而这些参数中的大部分都被写入到了wrfinput之中。如:

边界层参数化方案、陆面过程参数化方案以及网格中心经纬度。这些都不是作为变量存放在nc文件中的,而是以“属性”的形式。所以如果你遇到variables中找不到的变量,可以直接在nc文件对象的属性中查找。

读取变量和查看变量信息的方式和之前一样:

查看信息:

读取变量:

因为wrfinput的nc数据类型更为复杂,所以它的变量包含了更多的属性信息,例如C网格的间隔方向等等(如果不做模式的同学可以不用了解这个概念):

不管怎么样,有了netCDF4这个库,我们便可以方便快捷地读取nc数据了~

那么修改nc数据呢?也很简单,只需要在打开文件时加上‘a’或者‘w’即可:

如图,这里我已经对hgt.1973.nc中的level变量进行了修改。修改完毕后请不要忘记调用close进行关闭,这样才能完成对数据的修改。

最后再来说说HDF数据。hdf和netCDF一样,是一种自说明(即自带了数据信息说明)常用的数据格式,很多时候用在卫星资料的储存中。想要在Python中读取hdf格式数据则需要下载对应的库:hdf4、hdf5或者h5py。这里尤其请注意hdf的版本信息,hdf4和hdf5虽然一个是四一个是五,但实际的内部结构却有很大不同,需要调用不同的库进行解码。不过只要用对了库,其它的步骤和读取nc文件都差不多,例如读取风云卫星的标称数据:

我这里只是读取了该文件中的‘NomFileInfo’变量,这个变量中包含了卫星数据的一些基本信息。今后有机会的话我会来说说如何使用python读取风云卫星的标称hdf数据,并绘制卫星云图:

你可能感兴趣的:(气象类Python教程 ——netCDF4简介)