這里是目錄
- 前期準備
- wgrib2應該怎么用?
- wgrib2還有哪些功能比較好用(可能只是對于我)
- 如何提取我們需要的氣象因子出來(提取成nc檔案)
前期準備
1、python(我用的3.7.1,其他版本是一樣的),需要的python的包:os;
需要的其他東西:wgrib2,下載地址(推薦IE瀏覽器):可以自行去選擇對應的版本

我用的是windows,因此我下載的windows 64下面的,點進去里面東西很多,具體要下哪幾個呢?

當然,還有個很簡單的方法,你可以先下載這個wgrib2的exe應用程式,然后雙擊,他會提示你還差什么東西,根據他的提示你一個一個一個安裝就可以了,按照他的提示我安裝了5個dll檔案,你們也可以直接安裝這五個就夠了,只要你下載了然后點進去不報錯就說明成功了,
wgrib2應該怎么用?
進入python編譯器里面,匯入os包,然后第一步將作業目錄調至wgrib2的檔案夾里面,因為等會我們會用到他(wgrib2),

下面的代碼是使用這個的一個例子,我們可以看到通過這個程式指向我們的一個檔案,執行的操作是-v,這個是將fnl檔案里面的東西列條列出來,我把它復制到了文本框里面,就是下面這樣:

os.system(r"wgrib2 H:\\fnl_chengdu\\test\\fnl_20170320_06_00.grib2 -v")
wgrib2還有哪些功能比較好用(可能只是對于我)
通過上面的一個例子應該大家都能知道他的一個大概用法,對于我來說,因為我對于這個的話可能更需要的就是單個資料,因此我推薦的幾個功能:
-d 可以定位到上面對應的序號,這里不能活成是層,但是可以當成層來理解,比如上面的1代表的是第一層是風速的一個分量,以此類推,
-csv 這個一看大家應該都知道是干嘛了,可以用它把資料提取到csv檔案中,但是每個fnl資料里面包含的資料都是多種的,而我們往往只需要用到里面的一種或者幾種資料,因此我們可以告訴他我們需要那一層,因此我們可以加上前面的-d,告訴他是那一層,如下:(后邊的對應的是輸出路徑)
os.system(r"wgrib2 H:\\fnl_chengdu\\test\\fnl_20170320_06_00.grib2 -d 1 -csv H:1.csv")
-text 輸出成文本,其實與上面的csv類似的,但是也需要你指定層,不然資料量會超級大
-match 這個其實比較好用,比如我們要指定層,可以直接告訴他是多少層,用-d,但是也可以通過名字來匹配,比如:(但是注意,這里這里面TMP有很多層的,不同高度對應的都不一樣,所以需要更詳細點,加上:比如近地層的啊,2m的啊…)
os.system("wgrib2 H:\\fnl_chengdu\\test\\fnl_20170320_06_00.grib2 -match 'TMP' -csv H:1.csv")
-netcdf 將他轉為.nc檔案,這時候他就是妥妥的層資料了,這個時候可以再使用python的netcdf包進行進一步的操作,
nc_obj=Dataset('H:\\biyelunwen\\TEM2.nc')
for i in nc_obj.variables.keys():
print(i)
就能夠得到如下結果,證明他的資料集有四個,一個經度資料,一個緯度資料,一個時間,一個大氣頂層的溫度資料,(經過嘗試,你用wgrib2處理出來的nc檔案都自帶經緯度)

如何提取我們需要的氣象因子出來(提取成nc檔案)
import os
os.chdir("E:\\wgrib2")
dir_fnl="H:\\fnl_chengdu\\test\\"
all_file=os.listdir(dir_fnl)
list_name=["TMP","RH","U_wind","V_wind"]
list_floor=["238","239","241","242"]
out_filedir="E:\\氣候因子_成都\\"
for file_i in all_file:
file_split=os.path.splitext(file_i)
if file_split[1] == '.grib2':
for i in range(4):
out_name1=file_split[0]
out_name2=out_name1[4:12]
postfix=list_name[i]
out_name=postfix+out_name2+".nc"
filefold_dir=out_filedir+postfix+"\\"
print(filefold_dir)
op_dir=dir_fnl+file_i+" -d "+str(int(list_floor[i]))+" -netcdf "\
+filefold_dir+out_name
os.system(r"wgrib2 "+op_dir)
print(filefold_dir+out_name+" has been done!")
print("All the process has been finished!")
此處我要提取四種氣象因為,分別位list_name里面的幾種,前面的操作是針對名字什么的,然后給他整合到一個陳述句,最后再使用os模塊結合wgrib2進行處理即可,


轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/258909.html
標籤:其他
下一篇:vue和nuxt的整合專案報錯【Vue warn】: The client-side rendered virtual DOM tree is....并且頁面的生命周期函式執行兩次,徹底解決方案!
