ecCodes 学习 利用ecCodes Python API对GRIB文件进行读写
参考 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_release5. 关闭打开的 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
下面是一段读取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文件进行读写的更多相关文章
- ecCodes 学习 利用ecCodes fortran90 api对GRIB文件进行读写
参考 https://www.ecmwf.int/assets/elearning/eccodes/eccodes2/story_html5.htmlhttps://confluence.ecmwf. ...
- python入门基础:文件的读写
文件的读写操作运用广泛,无论是何种语言都会涉及到文件的输入输出. 下面简单的总结一下文件的读写: 1:open()函数 f = open('workfile', 'w') 函数 open()返回文件的 ...
- 第9.11节 Python中IO模块文件打开读写操作实例
为了对前面学习的内容进行一个系统化的应用,老猿写了一个程序来进行文件相关操作功能的测试. 一. 测试程序说明 该程序允许测试人员选择一个文件,自己输入文件打开模式.写入文件的位置以及写入内容,程序按照 ...
- python pandas 对各种文件的读写 IO tools
The pandas I/O API is a set of top level reader functions accessed like pd.read_csv() that generally ...
- python应用:TXT文件的读写
python读写TXT文件不需要导入包 python中常用的读写方式: 文件打开模式 描述 r 以只读模式打开文件,并将文件指针指向文件头:如果文件不存在会报错 w 以只写模式打开文件,并将文件指针指 ...
- python (11)文件的读写 按行读文件
读文件: 读取文件 f = open('\info.txt') fil = f.read() f.close() 按行读文件: f = open("info.txt") while ...
- Python实现对CSV文件的读写功能
我们要处理csv文件,首先要的导入csv模块 import csv #读取csv文件def readCsv(path): #传入变量csv文件的路径 list=[] #定义一个空列表 with ope ...
- hadoop学习笔记(六):HDFS文件的读写流程
一.HDFS读取文件流程: 详解读取流程: Client调用FileSystem.open()方法: 1 FileSystem通过RPC与NN通信,NN返回该文件的部分或全部block列表(含有blo ...
- python中的对文件的读写
简单的实例 open函数获取文件,w是写权限,可以对文件进行io操作 file=open('C:/Users/Administrator/Desktop/yes.txt','w') file.writ ...
随机推荐
- Lonely(非洲NANA作品)
Lonely(非洲NANA作品) 编辑 Lonely NANA,出生于1968年10月5日的非洲加纳.来自于加纳的NANA出身于一个富有的家庭,但是父亲在他小时候离他们而去,母亲带着年幼的NANA定居 ...
- Django 错误之 No module named ‘MySQLdb’
由于卸载Mysql时将很多相关依赖包都卸载了,重装mysql后启动django出现如下错误: django.core.exceptions.ImproperlyConfigured:Error loa ...
- rz -be 上传文件解压失败
在把Windows上的文件传至Linux端时用到SecureCRT,一般小文件都没有问题,文件太大时则出现了上传后的文件只有几K大小,当然大于2个G的是不可能传的上去的了.对于几百M到1G多的大文件要 ...
- debian 7 linux 安装jdk出现Error occurred during initialization of VM java/lang/NoClassDefFoun
debian 7 linux 安装jdk出现Error occurred during initialization of VM java/lang/NoClassDefFoun 这两天一直研究lin ...
- 1.2 Why Python for Data Analysis(为什么使用Python做数据分析)
1.2 Why Python for Data Analysis?(为什么使用Python做数据分析) 这节我就不进行过多介绍了,Python近几年的发展势头是有目共睹的,尤其是在科学计算,数据处理, ...
- PHP学习笔记一:谁动了你的mail(),PHP?
PHP编写邮件发送的函数时候,会出现一个很奇怪的问题,那就是: Warning: mail(): Failed to connect to mailserver at "localhost& ...
- macbook下 go 语言的 helloworld
go语言开发的目录 一般go语言$GOPATH 目录约定有三个子目录: src 存放源代码(比如:.go .c .h .s等) pkg 编译后生成的文件(比如:.a) bin 编译后生成的可执行文件( ...
- mysql 二进制日志binary log操作简单命令
show master status \G; #查看当前正在记录的二进制日志 show binary logs; #查看binary log 所有文件列表 show binlog events; #查 ...
- P1736 创意吃鱼法
题目描述 回到家中的猫猫把三桶鱼全部转移到了她那长方形大池子中,然后开始思考:到底要以何种方法吃鱼呢(猫猫就是这么可爱,吃鱼也要想好吃法 ^_*).她发现,把大池子视为01矩阵(0表示对应位置无鱼,1 ...
- HDU 1025 LIS二分优化
题目链接: acm.hdu.edu.cn/showproblem.php?pid=1025 Constructing Roads In JGShining's Kingdom Time Limit: ...