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

前期准备

1、python(我用的3.7.1,其他版本是一样的),需要的python的包:os;

需要的其他东西:wgrib2,下载地址(推荐IE浏览器):可以自行去选择对应的版本

e2a340c73dfe3661247a97a4a6439ded.png

我用的是windows,因此我下载的windows 64下面的。点进去里面东西很多,具体要下哪几个呢?

af693f23f2f8299aecdd73661e88ae26.png

当然,还有个很简单的方法,你可以先下载这个wgrib2的exe应用程序,然后双击,他会提示你还差什么东西,根据他的提示你一个一个一个安装就可以了。按照他的提示我安装了5个dll文件。你们也可以直接安装这五个就够了。只要你下载了然后点进去不报错就说明成功了。

wgrib2应该怎么用?

进入python编译器里面,导入os包,然后第一步将工作目录调至wgrib2的文件夹里面。因为等会我们会用到他(wgrib2)。

23ea542089ef91e245de01dfbae8d848.png

下面的代码是使用这个的一个例子,我们可以看到通过这个程序指向我们的一个文件,执行的操作是-v,这个是将fnl文件里面的东西列条列出来。我把它复制到了文本框里面,就是下面这样:

3b6b6c378909f8accca4f05018739733.png

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

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")1

-text 输出成文本,其实与上面的csv类似的,但是也需要你指定层。不然数据量会超级大

-match 这个其实比较好用,比如我们要指定层,可以直接告诉他是多少层,用-d,但是也可以通过名字来匹配,比如:(但是注意,这里这里面TMP有很多层的,不同高度对应的都不一样,所以需要更详细点,加上:比如近地层的啊,2m的啊…)

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

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

nc_obj=Dataset('H:\\biyelunwen\\TEM2.nc')

for i in nc_obj.variables.keys(): print(i)1

2

3

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

4258a9ef520eed0c518450ed1d1fc1bd.png

如何提取我们需要的气象因子出来(提取成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!")1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

此处我要提取四种气象因为,分别位list_name里面的几种。前面的操作是针对名字什么的,然后给他整合到一个语句,最后再使用os模块结合wgrib2进行处理即可。

9f51e6a4d20d7970f19a7a9ce81b6858.png

f487ae297eb1ebff6114c6dc89955a08.png

文章来源: blog.csdn.net,作者:Lf zhang,版权归原作者所有,如需转载,请联系作者。

原文链接:blog.csdn.net/zhanglingfeng1/article/details/113789121

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值