2

我正在尝试使用 pygrib 从 grib2 文件中读取数据,使用 python 对其进行插值,然后将其写入另一个文件。我已经尝试过 pygrib 和 eccodes 并且都产生了同样的问题。输出文件大小增加了 3 倍,但是当我尝试在天气和气候工具包等应用程序中查看数据时,它列出了所有变量,但绘制时“无数据”。如果我使用相同的脚本并且不插入数据,而只是将其写入新文件,它在 WCT 中可以正常工作。如果我使用 wgrib2 它会列出所有 grib 消息,但如果我使用 wgrib2 -V 它适用于未更改的数据,但会为插值数据生成错误“*** FATAL ERROR: unsupported: code table 5.6=0 ***” . 我在我的 python 脚本中做错了什么吗?这是我的一个例子 我正在写文件(使用 pygrib 2.05 和 2.1.3 的结果相同)。我使用了一个基本的 hrrr 文件作为示例。

import pygrib
import numpy as np
import sys

def writeNoChange():
    # This produces a useable grib file.

    filename = 'hrrr.t00z.wrfprsf06.grib2'
    outfile = 'test.grib2'

    grbs = pygrib.open(filename)

    with open(outfile, 'wb') as outgrb:
        for grb in grbs:
            msg = grb.tostring()
            outgrb.write(msg)
    outgrb.close()
    grbs.close()

def writeChange():
    # This method produces a grib file that isn't recognized by WCT
    
    filename = 'hrrr.t00z.wrfprsf06.grib2'
    outfile = 'testChange.grib2'

    grbs = pygrib.open(filename)

    with open(outfile, 'wb') as outgrb:
        for grb in grbs:
            vals = grb.values * 1
            grb['values'] = vals
            msg = grb.tostring()
            outgrb.write(msg)
    outgrb.close()
    grbs.close()

#-------------------------------
if __name__ == "__main__":
    writeNoChange()
    writeChange()
4

0 回答 0