python读取grib格式数据

python 读取grib/grib2格式数据

一般利用NCL(NCAR Command Language)读取。利用Python语言的pygrib库也可以读取grib/grib2格式数据

grib/grib2 格式数据介绍

1 数据下载方法

数据可以通过NCAR/UCAR的官网FNL再分析资料进行下载
注册账号–找下下载的数据–下载相应的下载shell脚本–在服务器中运行该脚本进行下载

2 数据格式

fnl再分析资料的数据格式有netcdf 和grib grib2 这几种数据格式,用于WRF读取的为grib grib2格式的,所以一般下载grib格式的数据。其中,grib1 的数据从1999年7月30日-2007年12月6日;grib2格式的数据从2007年12月7日到现在

3 数据变量

可以利用Panoply load 相应的grib2格式的数据查看变量
可以利用wgrib读取变量
可以利用pygrib函数读取变量【下面进行讲述】
变量对应的TABLE不能在文件中查看,只能在官网上寻找相应的TABLE grib2格式数据变量TABLE

pygrib 函数介绍

所有的pygrib版本都在Pythonpygrib官网中有介绍,包括其版本,安装包和安装方法。

1 头文件读取

头文件相关信息读取

import pygrib as pg
grbs = pg.open('fnl_17030406.grib2')# 所有变量
for grb in grbs:  
	print grb #每一个变量的头文件
	print grb.keys()  #每一个变量的keys
	print grb.values  # 每一个变量的值

头文件读取并写入txt脚本

import pygrib as pg
grbs = pg.open('fnl_17030406.grib2')
with open('fnl_17030406.txt','w') as f:
	for grb in grbs:
		f.write(str(grb) + '\n')
2 数据读取

读取数据并将数据写入txt文件中
但是写入txt文件中之后txt中的数据显示不完整,所以最好写入csv文件

import pygrib as pg
grbs = pg.open('fnl_17030406.grib2')
f = open('./txt/data_17090100.txt','w')
grbs.seek(0)
grb = grbs.select(name = 'U component of wind')[0]
f.write(str(grb) +'\n')
value = grb.values
f.write(str(value))
f.close()

读取数据并写入csv文件中
方法1:根据变量的名称和index 进行变量读取

import pygrib as pg
import pandas as pd
import csv
grbs = pg.open('fnl_17030406.grib2')
grbs.seek(0)
grb = grbs.select(name = '2 metre temperature')[0]
value = grb.values
data = pd.DataFrame(value)
data.to_csv('./txt/17090100.csv',index = False,header = False)
lats,lons = grb.latlons()
output_list = []
for i in range(lats.shape[0]):
    zip1 = zip(lats[i],lons[i])
    output_list.append(list(zip1))

output = pd.DataFrame(output_list)

方法2: 遍历所有变量,根据已知的时间,变量名,level等信息读取变量的value(一般来说这种方法更常用,而且不易出错)
详细内容请参加github中给出的Jupiter实例pygrib 实例:

import pygrib as pg
import pandas as pd
import csv
import datetime as dt
grbs = pg.open('fnl_17030406.grib2')
tem = []
data_valid = dt.datetime(2017,3,4,6)
for grb in grbs:
	if grb.validDate == date_valid and grb.parameterName == 'Temperature' and grb.level == 2:
	tem.append(grb,values)

你可能感兴趣的:(python)