window下python读取grib2数据

window下python读取grib2数据

    • 一、概述
    • 二、wgrib2.exe
    • 三、读取文件
    • 四、提取信息
    • 五、看数据
    • 五、grib2批量生成nc格式的数据
    • 六、总结

这一帖子是介绍如何在window系统下利用python读取grib2数据的过程。

一、概述

python在Linux系统下是可以直接利用包来读取grib2数据数据的,但是window系统下这个包好像不能用,那么咱们有两种途径去读取grib2数据。
1.利用二进制,一个字节一个字节去读取数据。
2.利用wgrib2.exe去读取数据。
相信大部分人都不会有第一种方式,除非没办法,本帖子也是介绍第二种方式。

二、wgrib2.exe

wgrib2.exe是一个应用程序,具体作用我不甚了解,但是当拿到grib2数据以后,经过各种查找,均告诉我可以利用它来读取grib2数据,因此也是百转千回的找到了一个版本,并且利用成功,如果大家无法找到,可以邮件作者,作者给你发一个。只需将这个exe放到一个文件夹下即可,不用双击打开,本文介绍的是用python完成。

三、读取文件

import os
os.chdir(r"D:\project\study_way\cartopy\grib2\3.0.2")# 将当前目录转到wgrib2工具目录
os.system(r"wgrib2 fnl_20200509_12_00.grib2 -v")# # 执行cmd命令,查看各个每一条参数信息

当我们执行上述代码之后,就会出现如下信息:

1:0:d=2020050912:CLMR Cloud Mixing Ratio [kg/kg]:1 hybrid level:anl:
2:4194:d=2020050912:ICMR Ice Water Mixing Ratio [kg/kg]:1 hybrid level:anl:
3:13859:d=2020050912:RWMR Rain Mixing Ratio [kg/kg]:1 hybrid level:anl:
。。。
8:162994:d=2020050912:UGRD U-Component of Wind [m/s]:planetary boundary layer:anl:
9:217434:d=2020050912:VGRD V-Component of Wind [m/s]:planetary boundary layer:anl:
。。。
13:439007:d=2020050912:TMP Temperature [K]:0.4 mb:anl:

这里我摘录了几个,大致几百行这样的信息,接下来我将会拿出一条来给大家介绍一下
例如:13:439007:d=2020050912:TMP Temperature [K]:0.4 mb:anl:
格式: 序号:***:时间:变量 解释 [单位]:层次或者分类标准:再分析
如此对应,序号13里面存放的就是0.4毫巴层次的温度,单位为K
至于其他的变量,大家看后面跟着的解释就好了。
这一步是必须要做的,目的是搞清楚我们需要的内容存放在哪里,特征信息是什么。

四、提取信息

os.system(r"wgrib2 fnl_20200509_12_00.grib2 -match ':TMP:2 mb' -csv 2mb_tmp.csv")

上述代码的含义就是,利用wgrib2读取fnl_20200509_12_00.grib2,然后提取TMP,2 mb的数据,存入格式csv,文件名2mb_tmp.csv
文件会出现在于wgrib2相同的目录下,fnl数据也放在其中,因为我用的相对路径,大家不想这么放也可以使用绝对路径
重点解释一下-match ‘:TMP:2 mb’,-match应该是一个命令,筛选的意思,具体大家可以去学习wgrib2,冒号(:)是一个分隔符,是语法要求,每一个冒号后面跟一个条件,所有条件用单引号包起来,许满足所有条件的数据才会被输出成一个csv(也可以是其他格式)
上面那句代码的含义就是提取2毫巴高度层的温度,生成一个2mb_tmp.csv

五、看数据

window下python读取grib2数据_第1张图片
数据中看出,第一列第二列是时间,第三列是层次,第四列是经度,第五列是纬度,第六列是温度
这样我们就可以用pandas之类的包去读取数据,分析画图了,当然,还可以生成nc格式的
例如:

os.system(r"wgrib2 fnl_20200509_12_00.grib2 -match ':TMP:2 mb' -netcdf 2mb_tmp.nc")

五、grib2批量生成nc格式的数据

下面给出一个grib2批量生成nc格式的python代码
不是作者写的,是在研究怎么都grib2数据时发现的,分享给大家

#版权声明:本文为CSDN博主「Lf zhang」的原创文章
#原文链接:https://blog.csdn.net/zhanglingfeng1/article/details/113789121

import os

os.chdir("E:\\wgrib2")#他的wgrib2放在E盘根目录
dir_fnl="H:\\fnl_chengdu\\test\\"#fnl文件路径文件夹
all_file=os.listdir(dir_fnl)#获取文件夹下的所有文件,返回一个文件名列表

#-----------------这两步需要使用帖子之前的方法先找到对应关系-------------------#
list_name=["TMP","RH","U_wind","V_wind"]#变量名称
list_floor=["238","239","241","242"]#变量代号
#-----------------这两步需要使用帖子之前的方法先找到对应关系-------------------#

out_filedir="E:\\气候因子_成都\\"#nc文件输出路径文件夹
for file_i in all_file:#开始循环每一个文件
    file_split=os.path.splitext(file_i)#对文件名进行分割
    if file_split[1] == '.grib2':#判断读到的文件是否为grib2数据
        for i in range(4):#循环四次,对应上面的四个变量
            out_name1=file_split[0]
            out_name2=out_name1[4:12]
            postfix=list_name
            out_name=postfix+out_name2+".nc"#进行一系列的字符串操作,生成nc文件的文件名
            filefold_dir=out_filedir+postfix+"\\"#路径
            print(filefold_dir)
            op_dir=dir_fnl+file_i+" -d "+str(int(list_floor))+" -netcdf "\
               +filefold_dir+out_name#字符串加操作,生成wgrib2的一个操作命令
            os.system(r"wgrib2 "+op_dir)#进行grib2和nc的转化
            print(filefold_dir+out_name+" has been done!")
print("All the process has been finished!")


#版权声明:本文为CSDN博主「Lf zhang」的原创文章
#原文链接:https://blog.csdn.net/zhanglingfeng1/article/details/113789121

里面的内容肯定不会适用于每个人,需要大家自行修改,我每一行都做了注释。如果还是不行,可以照帖子之前的做法一个一个去弄。

六、总结

1.python读取grib2数据的实质是利用os库,调用window命令行窗口,去执行wgrib2.exe,然后利用wgrib2.exe读取grib2数据并转化成其他格式。
2.转化格式以后不需要再单独写一个py文件,可以接着写下去,最后还可以删除利用wgrib2.exe保存的文件,假装没有利用过他
3.读取后的数据大家可以用来干任何事情,读取每层的风,算风切变,载读取湿度,计算水汽通量,等等,因为作者不是科班气象出身,其实这些都不会算也要查书现学,但是最底层的捕鱼技能以及在这个帖子里面写出来了。

如果需要wgrib2.exe,可以评论区留下邮箱

你可能感兴趣的:(python)