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])