1. 程式人生 > >windows python讀取grib2資料

windows python讀取grib2資料

一、環境準備

(1)、python3環境

(2)、wgirb工具(用於讀取grib1檔案),下載地址:  ftp://ftp.cpc.ncep.noaa.gov/wd51we/wgrib

(3)、wgirb2工具(用於讀取grib2檔案),下載地址:ftp://ftp.cpc.ncep.noaa.gov/wd51we/wgrib2

二、環境測試

工具下好了,windows下無需安裝,怎麼看是否能用呢?很簡答,以wgrib為例,下載好了之後在我的資料夾下是這樣的:

可以看到裡面有一個應用程式,那麼從命令列進入該資料夾下,執行命令:wgrib.exe就可以檢視一些使用幫助了,如下圖所示

可以看到很多提示資訊,也就是教我們如何使用這個工具。wgrib2也是同樣的檢視。

接下來就可以使用python來讀取grib1和grib2資料了(其實就是在python裡面呼叫cmd命令而已)

三、讀取資料

grib1和grib2資料我瞭解不多,說錯的地方還請大家指正,它們是兩種氣象資料,在我看來,它相當於一個大倉庫,裡面是一個個“小房間”,每個房間都有編號,每個“小房間”存放的是一個氣象變數,例如溫度、溼度、壓力等等,那麼如何讀取我們需要的氣候變數呢?下面分別以grib1和grib2資料為例,來讀取溫度變數的值。二者讀取方式相似,只是使用的工具不同。

剛剛說了,每一個“小房間”存放的是一個氣象變數且“小房間”有編號,那麼我們有2中方法進行讀取,一種是根據“小房間”編號進行讀取,另一種是根據變數名稱進行匹配讀取,一般來說後者使用的較多,畢竟使用名稱是肯定錯不了的。下面進行分別介紹。

1、按編號讀取

既然要根據編號讀取,那麼首先要知道編號才行,還好wgrib工具中也提供了這和功能。檢視“小房間”編號的程式碼如下:

import os
# 將當前目錄轉到wgrib工具目錄
os.chdir("G:\mygrib\wgrib1")
# 執行cmd命令,檢視各個“小房間”具體資訊
os.system(r"wgrib G:\mete_data\W_NAFP_C_ECMF_20170713190330_P_C3E07131200071312001 -v")

 

執行得到的結果如下圖所示:

 

       

 

     

 

如上圖所示,我們可以得到很多有用的資訊,例如:2m高的溫度變數所在的“小房間”編號是82,接下來就可以根據這個編號82來進行讀取2m溫度變數,讀取程式碼如下:

import os
# 將當前目錄轉到wgrib工具目錄
os.chdir("G:\mygrib\wgrib1")
# 執行cmd命令,檢視各個“小房間”具體資訊
# os.system(r"wgrib G:\mete_data\W_NAFP_C_ECMF_20170713190330_P_C3E07131200071312001 -v")
# 知道了編號82,那麼就可以根據這個編號把資料讀到一個txt裡面,注意:wgirb工具不支援讀到csv檔案,而wgrib2工具支援
os.system("wgrib G:\mete_data\W_NAFP_C_ECMF_20170713190330_P_C3E07131200071312001 -d 82 -h -text -o 2m_tmp.txt")

讀取結果如下圖所示:

除此之外,wgrib工具還支援“變數名稱匹配讀取”,在這裡就不介紹了,可以看下一部分的利用wgrib2工具進行“變數名稱匹配讀取”二者是類似的。

2、按名稱匹配讀取

一般來說,用名稱匹配讀取這個方法的佔多數,因為雖然grib檔案可以看做“倉庫”,一個個氣象變數可以看做“小房間”,但是不同的grib檔案內部的“小房間”分佈可能是不一樣的,這樣的話同一氣候變數的編號也就不確定,無法單靠一個編號批量讀取很多檔案。而利用名稱匹配讀取就不存在這個問題,因為氣象變數的名稱是不會變的。以讀取grib2檔案裡的2m處的溫度為例,這裡使用wgrib2工具,wgrib2工具功能更強大,可以直接讀出為csv檔案,程式碼如下:

import os
# 將當前目錄轉到wgrib2工具目錄
os.chdir("D:\mydownload\wgrib2")
# 進行氣象變數名稱匹配,讀取2m處溫度這個氣象變數到2m_tmp.csv檔案中
os.system("wgrib2 G:\mete_data\Z_NAFP_C_BABJ_20170709000000_P_CNPC-T639-GMFS-HNEHE-03900.grib2 -match ':TMP:2 m' -csv 2m_tmp.csv")

讀取結果如下圖所示:

 

csv格式的資料更便於我們處理,倒數第一列就是溫度值。

同理,其他的氣候變數同樣可以使用匹配的方式讀取出來,只是改變下程式碼-match後面的氣象變數即可,大家可能會問這些氣象變數的簡寫如何得知,這些都是固定的,目前為止我只用了溫度和降水,其他的我也不知道可憐,有需要的話可以去查一查。

結束

這兩個工具的功能還有很多,目前我用到的只是一丟丟,有其他需要的童鞋可以使用wgrib.exe和wgrib2.exe命令來進行檢視幫助,發掘更多功能。在linux下同樣可以使用這兩個工具進行讀取,只是在安裝和命令上有一點小小的差異,大家感興趣的可以一起討論下羨慕,水平有限,肯定有寫的不對的地方,歡迎指正!