nc文件,是我们气象专业常用的数据格式。而NCL语言,作为NCAR专门为气象从业者开发的计算和绘图语言,用来处理nc文件可谓顺滑至极。顺滑到让我一度以为nc文件的nc二字母就是取自于NCL,它俩是同宗同源的。 直到后来我查了一下了它们的全名: nc:network Common Data Format,网络通用数据格式。 NCL:NCAR Command Language,NCAR(美国国家大气研究中心)命令语言。 好吧,我的脑洞又开错了方向。 利用Python读写nc文件,我们需要借助netCDF4库。该库的安装方法也比较简单,直接pip install或者conda install就好了:

pip install netCDF4  # 或者 conda install netCDF4

以读取NNRP1再分析资料2019年经向风速的日资料uwnd.2019.nc为例,首先看看该文件都有哪些变量:

import netCDF4from netCDF4 import Datasetfile_path = 'uwnd.2019.nc' # 2019年经向风速日资料data = Dataset(file_path)all_vars = data.variables.keys()   #获取所有变量名称print(all_vars)

输出结果为:

dict_keys(['level', 'lat', 'lon', 'time', 'uwnd', 'time_bnds'])

具体看每个变量信息的代码如下:

all_vars_info = data.variables.items() print(all_vars_info)

这样就可以看到每个变量的纬度,单位,数值范围,缺测值等等的信息,考虑到篇幅关系,我这里只截一个time的图:

python写nc文件 python处理nc文件_Python怎么生成nc文件

既然知道了每个变量的变量名,那就可以直接读取它们啦:

uwnd = data.variables['uwnd']  level = data.variables['level']lat = data.variables['lat']lon = data.variables['lon']time = data.variables['time']

nc文件中,经常会用距离某个时间的小时数来表示时间。比如这里的time,从上图中time的变量信息可以看出它是用距离1800年1月1日00:00:00的小时数来表示的,那么就需要用这句代码把它转化为真实时间:

real_time = netCDF4.num2date(time,time.units)

我们在平时科研和业务中,也经常会遇到要截取一段经纬度和时间的情况,比如在NCL中,直接用大括号{min:max}就可以表示截取具体的数值。Python也有类似的写法,不过是用中括号[],并且[]内是用逗号,而不是冒号来分隔:

lon_min = 100lon_max = 130lat_min = 30lat_max = 50uwnd2 = uwnd[:,:,[lat_min,lat_max],[lon_min,lon_max]]