以前寫了一篇《基於Python的GRIB數據可視化》的文章,好多博友在評論裏問我Windows系統下如何讀取GRIB數據,在這裏我作一下說明。html
你們在windows系統不能讀取GRIB數據的主要緣由是,GRIB_API在Windows下沒法編譯安裝,從而致使pygrib安裝失敗。我曾經也爲這個問題苦惱了好久,也到ECMWF論壇裏找了好久,也給ECMWF發了郵件,迴應我沒有作Windows版本的打算,因此在Windows下直接用pygrib讀取GRIB數據是基本不可能實現了。python
後來經過大量的百度,仍是找到了在Windows下讀取GRIB數據的方法:一種是在Cygwin中安裝pygrib,將pygrib的方法編譯成讀取GRIB的exe;另外一種是經過一個第三方的程序wgrib2,先用wgrib2把數據讀存到txt,而後再用python讀取txt文件。
首先嚐試了Cygwin,pygrib成功編譯出了exe,可是沒法運行,感受Cygwin稍微複雜,因此我沒有繼續研究這一種方法,直接轉向第二種方法。git
wgrib2是由NCEP開發的一個功能強大的命令行工具,用於讀取、建立和修改GRIB2文件。它是原有支持GRIB1編碼的wgrib程序的延續,能夠完成GRIB2的編碼、解碼,插值、修改投影方式、修改經緯度範圍和要素提取等功能。wgrib2做爲GrADS軟件包中的一個工具,用戶能夠經過安裝GrADS得到該軟件,也能夠經過訪問它的官網得到最新的源碼 進行編譯。因爲新版的wgrib輸出數據之間沒有分隔符,因此我找了一個以前的版本,輸出後每一個數據佔一行。本文中使用的wgribwindows
Portable Grib decoder for NCEP/NCAR Reanalysis etc. it slices, dices v1.7.3.1 (8-5-99) Wesley Ebisuzaki usage: /cygdrive/d/wgrib/wgrib [grib file] [options] Inventory/diagnostic-output selections ;輸出目錄或診斷結果 -s/-v short/verbose inventory ;簡短/詳細目錄 -V diagnostic output (not inventory ;輸入診斷 (none) regular inventory ;默認目錄 Options ;選項 -PDS/-PDS10 print PDS in hex/decimal ;輸出16/10進制PDS -GDS/-GDS10 print GDS in hex/decimal ;輸出16/10進制GDS -verf print forecast verification time ;輸出預測驗證時間 -ncep_opn/-ncep_rean default T62 NCEP grib table ;默認爲T62_NCEP GRIB數據表 -4yr print year using 4 digits ;輸出4位數字的年份 Decoding GRIB selection ;GRIB解碼選項 -d [record number|all] decode record number ;解碼指定編號數據 -p [byte position] decode record at byte position ;解碼所指定的二進制位置數據 -i decode controlled by stdin (inventory list) ;按目錄列表解碼 (none) no decoding ;不解碼 Options ;選項 -text/-ieee/-grib/-bin convert to text/ieee/grib/bin (default) ;將解碼數據轉換成text/ieee/grib/bin格式的數據 -nh/-h output will have no headers/headers (default) ;是否包含標題頭 -H output will include PDS and GDS (-bin/-ieee only) ;輸出是否包含PDS和GDS -append append to output file ;在輸出文件上添加而不是替換 -o [file] output file name, 'dump' is default ;輸出文件名
os.system
在Python中執行Windows命令行程序wgribimport os os.system(os.path.abspath('.')+'\wgrib\wgrib.exe '+gribfilename+' -d 1 -text -nh -o '+outfilename)
這樣就能夠在指定目錄找到輸出的txt文件數組
原數據是37*37的數組,而輸出的數據是每一個數據佔一行,因此須要進行一下轉換app
f=open(outfilename,'r') grds=f.read().strip() grds=grds.split('\n') data= np.array(grds) data.resize(37,37) data= data.astype(float)
以上就是Windows下Python讀取GRIB數據的完整方法,但願能夠幫到須要的朋友工具