参考 https://www.ecmwf.int/assets/elearning/eccodes/eccodes2/story_html5.htmlhttps://confluence.ecmwf.int/display/ECC/GRIB+exampleshttps://confluence.ecmwf.int/download/attachments/97363968/eccodes_grib_python_2018.pdf

关于Python读取GRIB格式数据,Kallan写过一篇“基于Python的Grib数据可视化”,介绍了如何利用pygrib读取GRIB数据。但是pygrib所依赖的GRIB_API已不再更新,GRIB_API的开发者转为开发ecCodes,因此研究利用ecCodes的Python API读取GRIB数据。

此外,ecCodes自2.10.0版本以后,支持Python 3接口。可在CMake编译时,指定‘-DPYTHON_EXECUTABLE=/usr/bin/python3’选项,开启对Python3 的支持。

PS:编译完成后,还需要设置eccodes库路径(可参考此方法:设置python路径 - 一步一脚印,建议用其中第二种方法,从.pth文件中添加路径),否则可能运行时会出现"NameError: name ‘xxx’ is not defined"错误。

Python读取GRIB文件的流程和fortran类似,只是函数调用方式不一样。大致思路如下:

基本解码流程

1. 指定打开方式(“读”或“写”),打开一个或多个GRIB文件;

2. 根据不同加载方式,加载一个或多个GRIB messages到内存:
  有两种函数:codes_grib_new_from_file 和 codes_new_from_index。调用后会返回一个唯一的identifier,用于对已加载的GRIB messages进行操纵。

3. 调用codes_get函数对已加载的GRIB messages进行解码; (可以解码需要的数据)

4. 释放已经加载的GRIB messages:
  codes_release  

5. 关闭打开的 GRIB 文件.

顺序访问方式:

大致思路:

-> codes_open_file

-> codes_grib_new_from_file -> codes_get -> codes_release

-> codes_grib_new_from_file -> codes_get-> codes_release

-> codes_close_file

索引访问方式(通常比顺序访问快):

注意,eccodes中的index文件(后缀为.idx)与GrADS中后缀为.idx的文件不能通用!

大致思路:

-> codes_index_create(从grib文件创建index) 或 codes_index_read(读取已有index)

-> codes_index_select 选取键值

-> codes_new_from_index -> codes_get -> codes_release

-> codes_new_from_index -> codes_get -> codes_release

-> codes_index_release

——引自  ecCodes 学习 利用ecCodes fortran90 api对GRIB文件进行读写

下面是一段读取GRIB数据的示例代码

#!/usr/bin/env python
# -*- coding:utf-
from eccodes import * #打开文件
ifile = open('example.grib')
while 1:
igrib = codes_grib_new_from_file(ifile)
if igrib is None: break #从加载的message中解码/编码数据
date = codes_get(igrib,"dataDate")
levtype = codes_get(igrib,"typeOfLevel")
level = codes_get(igrib,"level")
values = codes_get_values(igrib)
print (date,levtype,level,values[0],values[len(values)-1]) #释放
codes_release(igrib)
ifile.close()

注:Python版本的函数与Fortran版本类似,所有函数列表参考http://download.ecmwf.int/test-data/eccodes/html/namespaceec_codes.html

ecCodes 学习 利用ecCodes Python API对GRIB文件进行读写的更多相关文章

  1. ecCodes 学习 利用ecCodes fortran90 api对GRIB文件进行读写

    参考 https://www.ecmwf.int/assets/elearning/eccodes/eccodes2/story_html5.htmlhttps://confluence.ecmwf. ...

  2. python入门基础:文件的读写

    文件的读写操作运用广泛,无论是何种语言都会涉及到文件的输入输出. 下面简单的总结一下文件的读写: 1:open()函数 f = open('workfile', 'w') 函数 open()返回文件的 ...

  3. 第9.11节 Python中IO模块文件打开读写操作实例

    为了对前面学习的内容进行一个系统化的应用,老猿写了一个程序来进行文件相关操作功能的测试. 一. 测试程序说明 该程序允许测试人员选择一个文件,自己输入文件打开模式.写入文件的位置以及写入内容,程序按照 ...

  4. python pandas 对各种文件的读写 IO tools

    The pandas I/O API is a set of top level reader functions accessed like pd.read_csv() that generally ...

  5. python应用:TXT文件的读写

    python读写TXT文件不需要导入包 python中常用的读写方式: 文件打开模式 描述 r 以只读模式打开文件,并将文件指针指向文件头:如果文件不存在会报错 w 以只写模式打开文件,并将文件指针指 ...

  6. python (11)文件的读写 按行读文件

    读文件: 读取文件 f = open('\info.txt') fil = f.read() f.close() 按行读文件: f = open("info.txt") while ...

  7. Python实现对CSV文件的读写功能

    我们要处理csv文件,首先要的导入csv模块 import csv #读取csv文件def readCsv(path): #传入变量csv文件的路径 list=[] #定义一个空列表 with ope ...

  8. hadoop学习笔记(六):HDFS文件的读写流程

    一.HDFS读取文件流程: 详解读取流程: Client调用FileSystem.open()方法: 1 FileSystem通过RPC与NN通信,NN返回该文件的部分或全部block列表(含有blo ...

  9. python中的对文件的读写

    简单的实例 open函数获取文件,w是写权限,可以对文件进行io操作 file=open('C:/Users/Administrator/Desktop/yes.txt','w') file.writ ...

随机推荐

  1. (1)线程的同步机制 (2)网络编程的常识 (3)基于tcp协议的编程模型

    1.线程的同步机制(重点)1.1 基本概念 当多个线程同时访问同一种共享资源时可能会造成数据的覆盖和不一致等问题,此时就需要对线程之间进行协调和通信,该方式就叫线程的同步机制. 如: 2003年左右 ...

  2. php中empty(),isset(),is_null(),==,===区别

    有关 PHP 的 empty(),isset() 还有 is_null() 这三个函数的用法讨论得已经很多了,而且很多资料也未必能说得很清楚.这里再重复一次,但不是从概念去说,直接用程序例子来说话,应 ...

  3. ZT 类模板Stack的实现 by vector

    *//*第3章 类模板 与函数相似,类也可以被一种或多种类型参数化.容器类就是一个具有这种特性的典型例子,它通常被用于管理某种特定类型的元素.只要使用类模板,你就可以实现容器类,而不需要确定容器中元素 ...

  4. 使用FASTJSON做反序列化的时间格式处理

    JSONObject.DEFFAULT_DATE_FORMAT = "yyyy-MM-dd'T'HH:mm:ss.mmm"; Productorder tmp1 = JSONObj ...

  5. HBase TableExistsException: hbase:namespace

    这个报错一般存在于独立安装Zookeeper集群中. 报这个错的操作时这样的, 先停掉了了Hbase formatZK后重启Hbase 启动hbase shell 后HMaster挂掉,看log里就有 ...

  6. ECharts 定制 label 样式

    起因 实现对 label 的样式定制,自定义字体颜色.大小等属性:效果如下图 实现   itemStyle: {   normal: {   color: '#f7ba0e',   label: { ...

  7. R语言常用语法和用法

    数据准备 height <- c(6.00, 5.92, 5.58, 5.92) 1 计算均值 mean(height) [1] 5.855 2 计算中位数 median(height) [1] ...

  8. BZOJ2286:[SDOI2011]消耗战(树形DP,虚树)

    Description 在一场战争中,战场由n个岛屿和n-1个桥梁组成,保证每两个岛屿间有且仅有一条路径可达.现在,我军已经侦查到敌军的总部在编号为1的岛屿,而且他们已经没有足够多的能源维系战斗,我军 ...

  9. asp.net Web API简单的特性路由配置

    一,控制器代码: [RoutePrefix("ajilisiwei")]  //加URL前缀 (非必需)    public class ShoppingController : ...

  10. Java基础加强之反射

    1.什么是反射? 反射其实就是动态的加载类,我们在写JDBC的时候加载驱动Class.forName("xxx")时就涉及到了反射. 反射机制是在运行状态中,对于任意一个类,都能够 ...