reki发布v2025.7.0版本
reki 项目已发布 v2025.7.0 版本,可以使用 pip 安装或更新到最新版。
新功能
使用CEMC短要素名加载GRIB2要素场
使用 load_field_from_file 等函数从 GRIB2 文件中加载要素场时,函数参数 parameter、level_type 和 level 分别被转换为字典形式的 GRIB 键值对,并合并到同一个字典对象中,随后使用该字典对象过滤 GRIB2 消息。
因此,检索某些要素场可以仅使用 CEMC 短要素名作为 parameter 参数。
例如检索 2 米温度:
from reki.format.grib.eccodes import load_field_from_file
field = load_field_from_file(
data_path,
parameter="t2m",
)
注:reki 同样支持 ecCodes 的 shortName,比如使用
parameter="2t"加载 2 米温度场。
检索 0-3km 垂直风切变:
field = load_field_from_file(
data_path,
parameter="shr(0-3000)",
)
CEMC 短要素名包含在 pandas.DataFrame 格式的 CEMC 要素清单 CEMC_PARAM_TABLE 中,可以使用如下代码查看:
from reki.format.grib.config import CEMC_PARAM_TABLE
CEMC_PARAM_TABLE
v2025.7.1:CEMC 短要素名支持 CMA-GFS GRIB2 数据。
v2025.7.2:CEMC 短要素名支持 CMA-MESO GRIB2 数据。
详细信息请访问 data-notebook 网站查看:https://data-notebook.perillaroc.wang
破坏更新
data_finder中配置文件整体作为Jinja2模板
data_finder 模块使用的配置文件是一个 Jinja2 模板,解析模板后得到 YAML 格式文本,加载 YAML 文本后得到最终使用的配置对象。 将配置文件整体作为 Jinja2 模板可以在配置文件中使用 Jinja2 模板的更多功能。
例如,下面代码来自 CMA-GFS grib2-orig 配置文件,使用 Jinja2 模板语法定义两个临时变量,并应用在后续的文件名和目录名中。
{% set start_time_string = time_vars.year ~ time_vars.month ~ time_vars.day ~ time_vars.hour %}
{% set start_date_string = time_vars.year ~ time_vars.month ~ time_vars.day %}
file_name: "Z_NAFP_C_BABJ_{{ start_time_string }}0000_P_NWPC-GRAPES-GFS-GLB-{{ time_vars.forecast_hour }}00.grib2"
paths:
- type: cmadaas
level: archive
path: '{{ query_vars.storage_base }}/DATA/NAFP/NMC/GRAPES-GFS-GLB/{{ time_vars.year }}/{{ start_date_string }}'
data_finder 内置的配置文件已全部更新,支持 CMA-HPC2023-SC1 上运行的 NWP 业务系统,删掉不再支持的数据条目。
模板变量 time_vars 成员变量有变化,仅保留起报时次和预报时效相关变量,将时间计算转移到模板中。
class TimeVars:
def __init__(
self,
start_time: Union[datetime.datetime, pd.Timestamp],
forecast_time: pd.Timedelta = pd.Timedelta(hours=0)
):
self.start_time = start_time
self.forecast_time = forecast_time
self.year = start_time.strftime("%Y")
self.month = start_time.strftime("%m")
self.day = start_time.strftime("%d")
self.hour = start_time.strftime("%H")
self.minute = start_time.strftime("%M")
self.forecast_hour = f"{get_forecast_hour(forecast_time):03}"
self.forecast_minute = f"{get_forecast_minute(forecast_time):02}"
模板解析也增加了一系列函数用于计算和打印时间:
def parse_template(template_content):
template = Template(template_content)
return template.render(
time_vars=time_vars,
query_vars=query_vars,
get_year=get_year,
get_month=get_month,
get_day=get_day,
get_hour=get_hour,
get_minute=get_minute,
get_forecast_hour=get_forecast_hour,
get_forecast_minute=get_forecast_minute,
generate_start_time=generate_start_time,
generate_forecast_time=generate_forecast_time,
)
更新
更新测试用例
为测试增加下载数据脚本 (tests/download_data.py),可以用于:
- 从 WIS WMC-BJ 网站下载 CMA-GFS GRIB2 数据
- 从 CMADaaS 挂载目录中拷贝 CMA-GFS GRIB2 数据
重写一部分测试用例:
format目录中的测试用例使用下载的 CMA-GFS 数据,可以运行在任意联网环境cma_hpc目录中的测试用例需要在国家级气象超算 (CMA-HPC2023-SC1) 中运行desktop目录中的测试用例需要在挂载 CMADaaS 目录的主机中运行,仅限 CMA 内网使用
注意:
cma_hpc目录中的一些测试用例仍在开发中。
参考
cemc-oper/reki项目: https://github.com/cemc-oper/reki
reki文档: https://reki.readthedocs.io/
data-notebook项目: https://github.com/cemc-oper/data-notebook
data-notebook网站: https://data-notebook.perillaroc.wang
