如何讀取GRIB數據?快看Python大神整理的干貨!
GRIB是WMO開發的一種用於交換和存儲規則分布數據的二進制文件格式,主要用來表示數值天氣預報的產品資料。現行的GRIB 碼版本有GRIB1 和GRIB2 兩種格式。由於小編只接觸過GRIB1數據,所以本文僅講解如何讀取GRIB1數據。
使用Python讀取GRIB數據要根據在何種平台分別討論。
一、Linux及Mac OS系統下
Linux、Mac OS系統下使用Python語言實現Grib數據讀取主要依靠pygrib庫,pygrib是歐洲中期天氣預報中心(ECMWF)的GRIG API C庫的Python接口,通過這個庫就可以將Grib數據讀取出來。
(一)導入pygrib模塊
>>> import pygrib
(二)打開Grib文件
>>> grbs = pygrib.open('/Users/Kallan/Documents/data/echhae50.082')
(三)提取文件信息
>>> grbs.seek(0)
>>> for grb in grbs:
grb
1:Geopotential Height:gpm (instant):regular_ll:isobaricInhPa:level 500:fcst time 24 :from 201507081200
信息解讀
1 :數據列表的行號,有的文件可能包括多個數據
Geopotential Height:數據的名稱
gpm (instant):數據的單位
regular_ll:常規數據,其實這個字段我也不清楚
isobaricInhPa:這個字段表示的是數據屬性,此處表示是以hPa為單位的等壓面
level 500:這個字段表示的是高度層
fcst time 24 :預報時效
from 201507081200 :起報時間
綜合上面的信息可以得出,這個文件是從2015年7月8日12時開始的24小時后500hPa等壓面高度場數據
(四)導出文件數據

二、Windows系統下
windows系統下並不能使用pygrib直接讀取GRIB數據,主要原因是:GRIB_API在Windows下無法編譯安裝,從而導致pygrib無法安裝。我曾經也為這個問題苦惱了很久,也到ECMWF論壇里找了很久,也給ECMWF發了郵件,回應我沒有做Windows版本的打算,所以在Windows下直接用pygrib讀取GRIB數據是基本不可能實現了。
后來通過大量的百度,還是找到了在Windows下讀取GRIB數據的方法:
一種是在Cygwin中安裝pygrib,將pygrib的方法編譯成讀取GRIB的exe;
第二種是通過一個第三方的程序wgrib,先用wgrib把數據讀存到txt,然后再用python讀取txt文件;
第三種是通過官方的GRIB數據說明文檔自己編寫解碼程序。
首先嘗試了Cygwin,pygrib成功編譯出了exe,但是無法運行,感覺Cygwin稍微復雜,所以我沒有繼續研究這一種方法,直接轉向第二種方法。
(一)wgrib
在cmd中直接運行wgrib.exe可得到如何使用的幫助信息。

知道如何使用wgrib程序后我們就可以使用os.system在Python中執行Windows命令行程序wgrib了

這樣就可以在指定目錄找到輸出的txt文件,然后將txt文件中的數據轉換成數組。
原數據是37*37的數組,而輸出的數據是每個數據占一行,所以需要進行一下轉換

(二)自己編寫解碼庫
編寫解碼程序的過程我已經記不清了,但是程序已經放到了GitHub中,大家可從頭條號主頁下方的GitHub菜單進入,里面還有GRIB的官方說明文檔,方便大家照着說明文檔繼續完善。
由於小編只用到了GRIB1格式的數據,所以只寫了GRIB1的解碼庫,而且僅僅是將數據導出功能,如果有感興趣的同學,可以繼續完善這個庫。