Link Search Menu Expand Document

grib2的時間標籤

Table of contents

背景

  • grib2是WMO會員國交流觀測與模擬結果氣象數據的重要協定格式。
  • 常用grib2檔案格式包括
  • grib2格式有許多parser,此處以最簡單的pygrib來提供時間標籤

程式設計及注意事項

  • 因為grib2檔案大多是一個timeframe一個檔案,而其grbs.message屬性(數據檔筆數)卻可能很多,因此需小心設計。
  • 原本設計
    • dates=list(set([grbs[i].validDate for i in range(1,grbs.messages+1)]))
    • 全部讀完每一筆數據的validDate時間,再由其集合來找出相異值,原則是沒有錯,但因為grib不像netCDF是層級且有壓縮設計、且是循序讀取,因此如果筆數多一點,讀取的速度會非常慢。
  • 修正設計
    • 一般想瞭解檔案的時間標籤大多為起、迄時間,因此只需執行最先與最後之筆數即可
    • dates=list(set([grbs[i].validDate for i in [1,grbs.messages]]))

程式碼

#$ cat ~/bin/pr_GrbTime.py
#!/opt/anaconda3/envs/gribby/bin/python
import sys
import pygrib
fname=sys.argv[1]
grbs = pygrib.open(fname)
m=grbs.messages
if m <=100:
  dates=list(set([grbs[i].validDate for i in range(1,m+1)]))
else:
  dates=list(set([grbs[i].validDate for i in [1,m]]))
n=len(dates)
if n>1:
  dates.sort()
for i in range(n):
  print(i,dates[i])