Windows下Python讀取GRIB數據


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

一、在Windows下Python為什么無法讀取GRIB

大家在windows系統不能讀取GRIB數據的主要原因是,GRIB_API在Windows下無法編譯安裝,從而導致pygrib安裝失敗。我曾經也為這個問題苦惱了很久,也到ECMWF論壇里找了很久,也給ECMWF發了郵件,回應我沒有做Windows版本的打算,所以在Windows下直接用pygrib讀取GRIB數據是基本不可能實現了。

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

后來通過大量的百度,還是找到了在Windows下讀取GRIB數據的方法:一種是在Cygwin中安裝pygrib,將pygrib的方法編譯成讀取GRIB的exe;另一種是通過一個第三方的程序wgrib2,先用wgrib2把數據讀存到txt,然后再用python讀取txt文件。
首先嘗試了Cygwin,pygrib成功編譯出了exe,但是無法運行,感覺Cygwin稍微復雜,所以我沒有繼續研究這一種方法,直接轉向第二種方法。

1.wgrib2

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

  • 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的數組,而輸出的數據是每個數據占一行,所以需要進行一下轉換

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數據的完整方法,希望可以幫到需要的朋友


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM