Windows下Python讀取GRIB數據

以前寫了一篇《基於Python的GRIB數據可視化》的文章,好多博友在評論裏問我Windows系統下如何讀取GRIB數據,在這裏我作一下說明。html

1、在Windows下Python爲何沒法讀取GRIB

你們在windows系統不能讀取GRIB數據的主要緣由是,GRIB_API在Windows下沒法編譯安裝,從而致使pygrib安裝失敗。我曾經也爲這個問題苦惱了好久,也到ECMWF論壇裏找了好久,也給ECMWF發了郵件,迴應我沒有作Windows版本的打算,因此在Windows下直接用pygrib讀取GRIB數據是基本不可能實現了。python

2、Windows下間接讀取GRIB數據方法

後來經過大量的百度,仍是找到了在Windows下讀取GRIB數據的方法:一種是在Cygwin中安裝pygrib,將pygrib的方法編譯成讀取GRIB的exe;另外一種是經過一個第三方的程序wgrib2,先用wgrib2把數據讀存到txt,而後再用python讀取txt文件。
首先嚐試了Cygwin,pygrib成功編譯出了exe,可是沒法運行,感受Cygwin稍微複雜,因此我沒有繼續研究這一種方法,直接轉向第二種方法。git

1.wgrib2

wgrib2是由NCEP開發的一個功能強大的命令行工具,用於讀取、建立和修改GRIB2文件。它是原有支持GRIB1編碼的wgrib程序的延續,能夠完成GRIB2的編碼、解碼,插值、修改投影方式、修改經緯度範圍和要素提取等功能。wgrib2做爲GrADS軟件包中的一個工具,用戶能夠經過安裝GrADS得到該軟件,也能夠經過訪問它的官網得到最新的源碼 進行編譯。因爲新版的wgrib輸出數據之間沒有分隔符,因此我找了一個以前的版本,輸出後每一個數據佔一行。本文中使用的wgribwindows

  • wgrib2命令參數
    在cmd中直接運行wgrib.exe可獲得如何使用的幫助信息。
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 ;輸出文件名

2.使用os.system在Python中執行Windows命令行程序wgrib

import os
os.system(os.path.abspath('.')+'\wgrib\wgrib.exe '+gribfilename+' -d 1 -text -nh -o '+outfilename)

這樣就能夠在指定目錄找到輸出的txt文件數組

3.將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數據的完整方法,但願能夠幫到須要的朋友工具

相關文章
相關標籤/搜索