如何在pygrib中设置expand_reduce为False以获取非结构化GFS数据
解决方案
你可以直接在拿到grib消息实例后手动修改expand_reduce属性,无需修改底层源码,操作方法如下:
方法1:单独修改单条消息属性(适合少量数据处理)
直接在读取对应消息后覆盖该属性即可:
import pygrib grbs = pygrib.open(filename) grb = grbs[1] # 手动修改属性值 grb.expand_reduce = False # 验证修改结果 print(grb.expand_reduce) # 输出为False # 此时获取的values就是非结构化缩减网格对应的一维数组 unstructured_data = grb.values
方法2:批量修改所有消息属性(适合大量数据处理)
如果需要处理的grib消息数量较多,可以通过猴子补丁修改工厂方法的默认配置,一劳永逸:
import pygrib from pygrib import _create_gribmessage # 保存原始方法 original_create = _create_gribmessage def patched_create(*args, **kwargs): grb = original_create(*args, **kwargs) # 统一修改默认值 grb.expand_reduce = False return grb # 替换原始方法 pygrib._create_gribmessage = patched_create # 后续读取的所有grib消息默认expand_reduce都为False grbs = pygrib.open(filename) for grb in grbs: print(grb.expand_reduce) # 全部输出为False
注意:两种修改方式都仅对当前运行的进程生效,不会改动pygrib的源码文件,也不会影响其他项目的pygrib使用逻辑。
内容的提问来源于stack exchange,提问作者Lorenzo Donadio
相关产品推荐
相关产品推荐

