一、环境准备
(1)、python3环境

(2)、wgirb工具(用于读取grib1文件),下载地址:  ftp://ftp.cpc.ncep.noaa.gov/wd51we/wgrib

(3)、wgirb2工具(用于读取grib2文件),下载地址:ftp://ftp.cpc.ncep.noaa.gov/wd51we/wgrib2

二、环境测试
工具下好了,windows下无需安装,怎么看是否能用呢?很简答,以wgrib为例,下载好了之后在我的文件夹下是这样的:

可以看到里面有一个应用程序,那么从命令行进入该文件夹下,运行命令:wgrib.exe就可以查看一些使用帮助了,如下图所示

可以看到很多提示信息,也就是教我们如何使用这个工具。wgrib2也是同样的查看。

接下来就可以使用python来读取grib1和grib2数据了(其实就是在python里面调用cmd命令而已)

三、读取数据
grib1和grib2数据我了解不多,说错的地方还请大家指正,它们是两种气象数据,在我看来,它相当于一个大仓库,里面是一个个“小房间”,每个房间都有编号,每个“小房间”存放的是一个气象变量,例如温度、湿度、压力等等,那么如何读取我们需要的气候变量呢?下面分别以grib1和grib2数据为例,来读取温度变量的值。二者读取方式相似,只是使用的工具不同。

刚刚说了,每一个“小房间”存放的是一个气象变量且“小房间”有编号,那么我们有2中方法进行读取,一种是根据“小房间”编号进行读取,另一种是根据变量名称进行匹配读取,一般来说后者使用的较多,毕竟使用名称是肯定错不了的。下面进行分别介绍。

1、按编号读取
既然要根据编号读取,那么首先要知道编号才行,还好wgrib工具中也提供了这和功能。查看“小房间”编号的代码如下:

import os
# 将当前目录转到wgrib工具目录
os.chdir("G:\mygrib\wgrib1")
# 执行cmd命令,查看各个“小房间”具体信息
os.system(r"wgrib G:\mete_data\W_NAFP_C_ECMF_20170713190330_P_C3E07131200071312001 -v")
运行得到的结果如下图所示:

如上图所示,我们可以得到很多有用的信息,例如:2m高的温度变量所在的“小房间”编号是82,接下来就可以根据这个编号82来进行读取2m温度变量,读取代码如下:

import os
# 将当前目录转到wgrib工具目录
os.chdir("G:\mygrib\wgrib1")
# 执行cmd命令,查看各个“小房间”具体信息
# os.system(r"wgrib G:\mete_data\W_NAFP_C_ECMF_20170713190330_P_C3E07131200071312001 -v")
# 知道了编号82,那么就可以根据这个编号把数据读到一个txt里面,注意:wgirb工具不支持读到csv文件,而wgrib2工具支持
os.system("wgrib G:\mete_data\W_NAFP_C_ECMF_20170713190330_P_C3E07131200071312001 -d 82 -h -text -o 2m_tmp.txt")
读取结果如下图所示:

除此之外,wgrib工具还支持“变量名称匹配读取”,在这里就不介绍了,可以看下一部分的利用wgrib2工具进行“变量名称匹配读取”二者是类似的。

2、按名称匹配读取
一般来说,用名称匹配读取这个方法的占多数,因为虽然grib文件可以看做“仓库”,一个个气象变量可以看做“小房间”,但是不同的grib文件内部的“小房间”分布可能是不一样的,这样的话同一气候变量的编号也就不确定,无法单靠一个编号批量读取很多文件。而利用名称匹配读取就不存在这个问题,因为气象变量的名称是不会变的。以读取grib2文件里的2m处的温度为例,这里使用wgrib2工具,wgrib2工具功能更强大,可以直接读出为csv文件,代码如下:

import os
# 将当前目录转到wgrib2工具目录
os.chdir("D:\mydownload\wgrib2")
# 进行气象变量名称匹配,读取2m处温度这个气象变量到2m_tmp.csv文件中
os.system("wgrib2 G:\mete_data\Z_NAFP_C_BABJ_20170709000000_P_CNPC-T639-GMFS-HNEHE-03900.grib2 -match ':TMP:2 m' -csv 2m_tmp.csv")
读取结果如下图所示:

csv格式的数据更便于我们处理,倒数第一列就是温度值。

同理,其他的气候变量同样可以使用匹配的方式读取出来,只是改变下代码-match后面的气象变量即可,大家可能会问这些气象变量的简写如何得知,这些都是固定的,目前为止我只用了温度和降水,其他的我也不知道,有需要的话可以去查一查。

结束
这两个工具的功能还有很多,目前我用到的只是一丢丢,有其他需要的童鞋可以使用wgrib.exe和wgrib2.exe命令来进行查看帮助,发掘更多功能。在linux下同样可以使用这两个工具进行读取,只是在安装和命令上有一点小小的差异,大家感兴趣的可以一起讨论下,水平有限,肯定有写的不对的地方,欢迎指正!
---------------------
作者:全村的希望呀
来源:CSDN
原文:https://blog.csdn.net/m0_37600626/article/details/79311129?utm_source=copy
版权声明:本文为博主原创文章,转载请附上博文链接!

python 读取grib \grib2的更多相关文章

  1. python读取grib grib2气象数据

    如何读取GRIB数据?快看Python大神整理的干货! 橙子心法 百家号17-11-0116:30 GRIB是WMO开发的一种用于交换和存储规则分布数据的二进制文件格式,主要用来表示数值天气预报的产品 ...

  2. Windows下Python读取GRIB数据

    之前写了一篇<基于Python的GRIB数据可视化>的文章,好多博友在评论里问我Windows系统下如何读取GRIB数据,在这里我做一下说明. 一.在Windows下Python为什么无法 ...

  3. python读取excel一例-------从工资表逐行提取信息

    在工作中经常要用到python操作excel,比如笔者公司中一个人事MM在发工资单的时候,需要从几百行的excel表中逐条的粘出信息,然后逐个的发送到员工的邮箱中.人事MM对此事不胜其烦,终于在某天请 ...

  4. python读取xml文件

    关于python读取xml文章很多,但大多文章都是贴一个xml文件,然后再贴个处理文件的代码.这样并不利于初学者的学习,希望这篇文章可以更通俗易懂的教如何使用python 来读取xml 文件. 什么是 ...

  5. python读取mnist

    python读取mnist 其实就是python怎么读取binnary file mnist的结构如下,选取train-images TRAINING SET IMAGE FILE (train-im ...

  6. [转] Windows下使用Python读取Excel表格数据

    http://www.python-excel.org/这个网站罗列了很多关于在Python下操作Excel文件的信息,这里选择了其介绍的第一个模块xlrd . xlrd 0.9.2版本跨平台同时支持 ...

  7. Python读取txt文件

    Python读取txt文件,有两种方式: (1)逐行读取 data=open("data.txt") line=data.readline() while line: print ...

  8. Python读取Yaml文件

    近期看到好多使用Yaml文件做为配置文件或者数据文件的工程,随即也研究了下,发现Yaml有几个优点:可读性好.和脚本语言的交互性好(确实非常好).使用实现语言的数据类型.有一个一致的数据模型.易于实现 ...

  9. python读取中文文件编码问题

    python 读取中文文件后,作为参数使用,经常会遇到乱码或者报错asii错误等. 我们需要对中文进行decode('gbk') 如我有一个data.txt文件有如下内容: 百度 谷歌 现在想读取文件 ...

随机推荐

  1. WPF动态时间(电子表)

    private DispatcherTimer dispatcherTimer; public MainWindow() { InitializeComponent(); dispatcherTime ...

  2. PCM简介

    1. 差分脉冲编码调制 如果两个相邻抽样值之间的相关性很大,那么它们的差值就较小,这样,仅对差值量化可以使用较少的比特数,此即差分PCM,或DPCM. 为了理论方便,我们将采样和量化分开,并用不带上三 ...

  3. [蓝桥杯]ALGO-49.算法训练_寻找数组中最大值

    题目描述: 问题描述 对于给定整数数组a[],寻找其中最大值,并返回下标. 输入格式 整数数组a[],数组元素个数小于1等于100.输出数据分作两行:第一行只有一个数,表示数组元素个数:第二行为数组的 ...

  4. P1106删数问题

    链接 题解: #include<iostream>#include<cstdio>#include<cstring>using namespace std;int ...

  5. kafka产生的数据通过Flume存到HDFS中

    试验目标: 把kafka的生产者发出的数据流经由Flume放到HDFS来存储. 试验环境: java:1.8 kafka:2.11 flume:1.6 hadoop:2.8.5 试验流程: 1.进入z ...

  6. Service Mesh简介

    1.1 Service Mesh   1.1.1 什么是Service Mesh Service Mesh是最近才兴起的一个名词,最早在2016年9月29日由开发Linkerd的Buoyant公司首次 ...

  7. keras LSTM学习实例

    1. 购物时间预测 http://www.cnblogs.com/arkenstone/p/5794063.html https://github.com/CasiaFan/time_seires_p ...

  8. Jmeter(八)HTTPCookie管理器

    Cookie绝对是日常工作以及技术中一个绕不过去的‘角色’,正常各种各样的业务需要Cookie的存在.Jmeter中也有支持发送Cookie的组件,但是,仅是后话:在此还是有必要先记一记Cookie到 ...

  9. Java常用的线程池

    Java通过Executors提供四种线程池,分别为:newCachedThreadPool创建一个可缓存线程池,如果线程池长度超过处理需要,可灵活回收空闲线程,若无可回收,则新建线程.newFixe ...

  10. iis ajax post 跨域问题解决

    iis ajax post时会遇到跨域的问题 只需要在IIS中http响应头中增加:Access-Control-Allow-Origin:*,即可解决问题