使用python直接提取fnl再分析资料的气象因子数据

这里是目录

  • 前期准备
    • wgrib2应该怎么用?
    • wgrib2还有哪些功能比较好用(可能只是对于我)
    • 如何提取我们需要的气象因子出来(提取成nc文件)

前期准备

1、python(我用的3.7.1,其他版本是一样的),需要的python的包:os;
需要的其他东西:wgrib2,下载地址(推荐IE浏览器):可以自行去选择对应的版本
使用python直接提取fnl再分析资料的气象因子数据_第1张图片
我用的是windows,因此我下载的windows 64下面的。点进去里面东西很多,具体要下哪几个呢?
使用python直接提取fnl再分析资料的气象因子数据_第2张图片
当然,还有个很简单的方法,你可以先下载这个wgrib2的exe应用程序,然后双击,他会提示你还差什么东西,根据他的提示你一个一个一个安装就可以了。按照他的提示我安装了5个dll文件。你们也可以直接安装这五个就够了。只要你下载了然后点进去不报错就说明成功了。

wgrib2应该怎么用?

进入python编译器里面,导入os包,然后第一步将工作目录调至wgrib2的文件夹里面。因为等会我们会用到他(wgrib2)。
使用python直接提取fnl再分析资料的气象因子数据_第3张图片
下面的代码是使用这个的一个例子,我们可以看到通过这个程序指向我们的一个文件,执行的操作是-v,这个是将fnl文件里面的东西列条列出来。我把它复制到了文本框里面,就是下面这样:
使用python直接提取fnl再分析资料的气象因子数据_第4张图片

os.system(r"wgrib2 H:\\fnl_chengdu\\test\\fnl_20170320_06_00.grib2 -v")

wgrib2还有哪些功能比较好用(可能只是对于我)

通过上面的一个例子应该大家都能知道他的一个大概用法,对于我来说,因为我对于这个的话可能更需要的就是单个数据,因此我推荐的几个功能:
-d 可以定位到上面对应的序号,这里不能活成是层,但是可以当成层来理解。比如上面的1代表的是第一层是风速的一个分量,以此类推。
-csv 这个一看大家应该都知道是干嘛了,可以用它把数据提取到csv文件中。但是每个fnl数据里面包含的数据都是多种的,而我们往往只需要用到里面的一种或者几种数据,因此我们可以告诉他我们需要那一层,因此我们可以加上前面的-d,告诉他是那一层。如下:(后边的对应的是输出路径)

os.system(r"wgrib2 H:\\fnl_chengdu\\test\\fnl_20170320_06_00.grib2 -d 1 -csv H:1.csv")

-text 输出成文本,其实与上面的csv类似的,但是也需要你指定层。不然数据量会超级大
-match 这个其实比较好用,比如我们要指定层,可以直接告诉他是多少层,用-d,但是也可以通过名字来匹配,比如:(但是注意,这里这里面TMP有很多层的,不同高度对应的都不一样,所以需要更详细点,加上:比如近地层的啊,2m的啊…)

os.system("wgrib2 H:\\fnl_chengdu\\test\\fnl_20170320_06_00.grib2 -match 'TMP' -csv H:1.csv")

-netcdf 将他转为.nc文件,这时候他就是妥妥的层数据了。这个时候可以再使用python的netcdf包进行进一步的操作。

nc_obj=Dataset('H:\\biyelunwen\\TEM2.nc')
for i in nc_obj.variables.keys():
    print(i)

就能够得到如下结果,证明他的数据集有四个,一个经度数据,一个纬度数据,一个时间,一个大气顶层的温度数据。(经过尝试,你用wgrib2处理出来的nc文件都自带经纬度)
在这里插入图片描述

如何提取我们需要的气象因子出来(提取成nc文件)

import os

os.chdir("E:\\wgrib2")
dir_fnl="H:\\fnl_chengdu\\test\\"
all_file=os.listdir(dir_fnl)
list_name=["TMP","RH","U_wind","V_wind"]
list_floor=["238","239","241","242"]
out_filedir="E:\\气候因子_成都\\"
for file_i in all_file:
    file_split=os.path.splitext(file_i)
    if file_split[1] == '.grib2':
        for i in range(4):
            out_name1=file_split[0]
            out_name2=out_name1[4:12]
            postfix=list_name[i]
            out_name=postfix+out_name2+".nc"
            filefold_dir=out_filedir+postfix+"\\"
            print(filefold_dir)
            op_dir=dir_fnl+file_i+" -d "+str(int(list_floor[i]))+" -netcdf "\
               +filefold_dir+out_name
            os.system(r"wgrib2 "+op_dir)
            print(filefold_dir+out_name+" has been done!")
print("All the process has been finished!")

此处我要提取四种气象因为,分别位list_name里面的几种。前面的操作是针对名字什么的,然后给他整合到一个语句,最后再使用os模块结合wgrib2进行处理即可。
使用python直接提取fnl再分析资料的气象因子数据_第5张图片
使用python直接提取fnl再分析资料的气象因子数据_第6张图片

你可能感兴趣的:(python)