作者:chinagod
原文链接:https://www.bbsmax.com/A/QV5Z6qbe5y/

参考 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. python的错误 File E:/Python 的代码大大/文件的读写操作.py, line 1 SyntaxError: Non-UTF-8 code starting with '\xcf

    错误: File "E:/Python 的代码大大/文件的读写操作.py", line 1 SyntaxError: Non-UTF-8 code starting with '\ ...

  2. xml的学习和使用python解析读取xml文件

    1. XML的介绍 XML 指可扩展标记语言(EXtensible Markup Language). 和json类似也是用于存储和传输数据,还可以用作配置文件. 类似于HTML超文本标记语言,但是H ...

  3. python代码写入方式_【Python 1-17】Python手把手教程之——文件的读写以及I/O操作...

    作者 | 弗拉德 来源 | 弗拉德(公众号:fulade_me) 从文件中读取数据 文本文件可存储的数据量很多,每当需要分析或修改存储在文件中的信息时,读取文件都很有用,对数据分析应用程序来说尤其 如 ...

  4. 利用matlab和python读micaps格式文件、读写二进制文件

    经常需要绘图,但常用的绘图工具还是GrADs,因此要写一份二进制文件.(后期应该会转向NCL的吧) 需要注意的是,GrADs所需的二进制文件存储循环为经度x,纬度y,高度z,变量1,变量2,-,时间t ...

  5. [转载] Numpy学习之矩阵、函数、二元运算及数组读写

    参考链接: Numpy 二元运算 矩阵 # --*--coding:utf-8--*-- import numpy as np """ 矩阵 ""&q ...

  6. python中几种读取文件的方法_科学网—python中几类文件的读写 - 郗强的博文

    所使用python模块为json.csv等. 一.json文件读写 1.JSON简介:其全名为JavaScript Object Notation是一种轻量级的数据交换格式.Json最广泛的应用是作为 ...

  7. python上传excel文件_python读写Excel python实现Excel上传

    最近小编在处理各种.xlsx表格的数据处理和计算的工作,目前python用于操作表格的模块有很多,功能各有千秋.本文主要讲的是xlwt用于写,xlrt用于读. 表格写入 简单的写入功能可用xlwt模块 ...

  8. python本地读csv文件_python读写csv文件方法详细总结

    python提供了大量的库,可以非常方便的进行各种操作,现在把python中实现读写csv文件的方法使用程序的方式呈现出来. 在编写python程序的时候需要csv模块或者pandas模块,其中csv ...

  9. 理解h5文件并使用python对h5格式文件进行读写操作

    (一)HDF与h5   HDF(Hierarchical Data Format层次数据格式)是一种设计用于存储和组织大量数据的文件格式,最开始由美国国家超算中心研发,后来由一个非盈利组织HDF Gr ...

  10. python pandas csv 写文件_Pandas读写CSV文件的方法介绍(附代码)

    本篇文章给大家带来的内容是关于Pandas读写CSV文件的方法介绍(附代码),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助. 读csv:使用pandas读取import pandas ...

最新文章

  1. html5自定义属性作用,html5自定义属性:如何获取自定义属性值(附代码)
  2. error C2061: 语法错误: 标识符“std”
  3. AES CBC模式下的CBC bit flipping Attack
  4. 【普及组模拟赛】游戏
  5. [js开源组件开发]图片放大镜
  6. SAP UI5 Simple form rendering
  7. 每个程序员都该学习的5种开发语言,不可错过!
  8. Dirichlet过程混合模型(DPMM)的Gibbs抽样程序
  9. signal.h-----信号函数
  10. win7在计算机中虚拟光驱怎么删除,win7系统删除虚拟光驱的操作方法
  11. linux DSA 开发上手笔记(一)
  12. Java获取压缩包内文件数_java获取递归获取嵌套压缩包(zip和rar)中的所有文件
  13. 质量功能配置(QFD)矩阵
  14. 机器学习从入门到创业手记-应用与实践
  15. Maxwell和Simplorer联合仿真设置注意事项
  16. [网页设计]如何在Photoshop里画虚线?
  17. Windows 10操作系统配置L2TP方法
  18. [转]阿里云的这群疯子
  19. SSH连接慢问题解决
  20. javascript取本周星期一到星期天对应日期的通用方法

热门文章

  1. 美联储加息75个基点释放什么信号?对我们有什么影响
  2. 将pyecharts生成的html转为图片的一些问题
  3. C++多线程detach函数使用
  4. 大数据:一张图让你明白什么是大数据
  5. PCB中产生电磁干扰的原因及消除干扰技巧
  6. 有没有永久免费的云服务器?看完这篇文章你就明白了!
  7. Vue npm install失败报错errno -4058
  8. PQ分区出错,由Ghost来补救的办法(转)
  9. php强行横屏,强制横屏app
  10. 谷歌SEO考虑富媒体文件