使用cdsapi service函数下载ERA5统计数据的两个技术问题
解决ERA5每日统计数据下载的两个问题
1. 自定义下载文件名
cdsapi.Client.download()方法支持通过target参数指定自定义文件名,你可以结合年份、月份等信息构造有辨识度的文件名,避免随机命名带来的查找麻烦。
2. 多变量下载的错误修复
你遇到的TypeError是因为用了**集合({})传递多变量,而JSON序列化不支持集合类型。只需把集合改成列表([])**即可,该C3S每日统计工具本身支持同时下载多个变量。
修改后的完整脚本
import cdsapi c = cdsapi.Client(timeout=600) YEARS = range(1950,1951) MONTHS = ["01","02","03","04","05","06","07","08","09","10","11","12"] for year in YEARS: for month in MONTHS: # 构造自定义文件名,可根据需求调整格式 filename = f"era5_daily_mean_{year}_{month}.nc" result = c.service( "tool.toolbox.orchestrator.workflow", params={ "realm": "user-apps", "project": "app-c3s-daily-era5-statistics", "version": "master", "kwargs": { "dataset": "reanalysis-era5-single-levels", "product_type": "reanalysis", # 改用列表格式传递多变量 "variable": [ "2m_temperature", "2m_dewpoint_temperature", "10m_u_component_of_wind", "10m_v_component_of_wind" ], "statistic": "daily_mean", "year": str(year), "month": month, "time_zone": "UTC+00:00", "frequency": "1-hourly", "grid": "0.25/0.25", "area": {"lat": [25.15265, 52.84375], "lon": [-124.59375, -67.03125]} }, "workflow_name": "application" } ) # 通过target参数指定自定义文件名 c.download(result, target=filename)
补充说明
- 文件名可按需扩展,比如加入统计类型、变量缩写等,进一步提升辨识度。
- 将
year转为字符串格式是为了适配部分CDS服务的参数要求,避免潜在的类型报错。
内容的提问来源于stack exchange,提问作者Gioia
相关产品推荐
相关产品推荐

