我在 x86 linux 机器上有一个工作程序,它使用 pynio 从 NOAA 的 NBM 产品中读取 grib2 文件。代码的简化版本如下所示:
import Nio
f = Nio.open_file('foo.grib2', mode='r', options=None)
vars = list(f.variables)
当我打印变量列表时,我得到类似
APCP_P8_L1_acc1h
APCP_P9_L1_acc1h
APTMP_P0_L103
ASNOW_P8_L1_acc1h
CAPE_P0_L1
CAPE_P2_L1
CEIL_P0_L2
CEIL_P0_L215
CEIL_P5_L215
CEIL_probability2
DIST_P0_2L1_103
etc.
现在我必须将我的程序移植到不支持该Nio
模块的架构(aarch64),所以我显然必须改用该cfgrib
模块并开始使用它。
varlist = []
datasets = cfgrib.open_datasets('foo.grib2') # Opens a single file as a list of datasets
for ds in datasets:
for v in ds.variables:
varlist.append(v)
varlist = list(set(varlist)) # eliminate duplicate entries
这个新列表包含如下所示的条目:
aptmp
asnow
atmosphere
atmosphereSingleLayer
cape
ceil
cloudBase
cloudCeiling
cloudTop
d2m
dswrf
gust
h
heightAboveGround
heightAboveSea
etc.
这里需要注意的重点是
- 使用两种不同方法获得的变量名之间没有直接对应关系;
- 当我使用 ; 读取文件时,我之前使用的多个变量(例如 、
CEIL_P0_L2
、)似乎对应于不同子数据集中变量(例如 )的重复出现;CEIL_P0_L215
CEIL_P5_L215
ceil
cfgrib
- 出现的其他变量名称(例如 ,
atmosphere
)atmosphereSingleLayer
似乎起到了不同于实际数值字段的作用。 - 许多网格字段与变量名称一起
unknown
显示(上面的部分列表中未显示),我不知道如何弄清楚这些是什么,甚至打印数据集的所有字段。
我的问题:为什么变量名称不同,更重要的是,我如何使用它cfgrib
来可靠地识别和提取与原始变量名称相对应的字段,如所见(或构造?)Nio
?
警告:原始Nio
程序最后一次在近一年前的 NBM 文件上运行,而我cfgrib
在 2021 年 8 月从同一来源获得的文件上运行。我想这些文件的内部结构可能在此期间发生了变化,尽管那似乎不太可能。