我有一个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模块的体系结构(Nio)上,所以我显然不得不使用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.这里要注意的重要一点是
使用我以前使用过的两个不同的methods;
CEIL_P0_L2、CEIL_P0_L215、CEIL_P5_L215)获得的变量名之间没有直接的对应关系,这似乎与当我用cfgrib读取文件时变量(例如ceil)在不同子数据集中的递归相对应;
atmosphere、atmosphereSingleLayer)似乎不是作为一个实际的数值字段而起作用。
unknown (未在上面的部分列表中显示),而且我不知道如何知道它们是什么,甚至打印数据集的所有字段。我的问题是:变量名为什么不同,更重要的是,如何使用cfgrib可靠地识别和提取与原始变量名对应的字段(或构造)?由Nio
注意:最初的Nio程序是在将近一年前的NBM文件上运行的,而我是在2021年8月从同一个来源获得的文件上运行cfgrib的。我认为这些文件的内部结构在过渡期间可能已经发生了变化,尽管这似乎不太可能。
发布于 2021-10-14 06:02:13
所以首先,这不是一个属于堆栈溢出的问题,请在将来使用例如https://earthscience.stackexchange.com/。
名称不同的原因是软件包使用不同的默认grib_tables。在这些grib_tables中定义和映射变量和标识符。因此,如果您想获得相同的结果,就必须同步grib_tables。当cfgrib使用ECCODES作为后端时,您可能会看到ECCODES_DEFINTIONS_PATH
https://stackoverflow.com/questions/69005257
复制相似问题