【WRF数据准备】批量下载ERA5再分析数据-气象驱动数据
目录
- 准备工作
- 1. 安装 cdsapi 模块
- 2. .cdsapirc 文件配置
- 实现代码
- retrieve.grid.sh 脚本
- grib.pre.2022.baz 模板(ERA5 气压层)
- grib.sur.2022.baz 模板(ERA5 地面层)
- 运行方式
- 参考
气象驱动数据-ERA5再分析数据的手动下载可以参考我的另一博客-【WRF数据准备】气象驱动数据-ERA5再分析数据(Copernicus)。
本博客详细介绍批量下载ERA5再分析数据,并给出完整实现代码。
批量下载 ERA5 的气压层(pressure level)和地面层(single level)数据(GRIB 格式),自动循环日期,并分别保存为不同文件名。
准备工作
1. 安装 cdsapi 模块
conda activate myenv3.10# 使用 conda 或 pip 安装 cdsapi
pip install cdsapi
conda install cdsapi
验证安装是否成功,可以执行以下命令测试:
python -c "import cdsapi; print('✅ cdsapi 已成功安装')"
如果没有报错,就表示安装成功了。
2. .cdsapirc 文件配置
可以从 CDS 网站获取 和 :CDS 网站-Climate Data Store
登录后,页面顶部会显示 API key,例如:
url: https://cds.climate.copernicus.eu/api/v2
key: <uid>:<api-key>
在 ~/ 文件夹下新建.cdsapirc 文件,并填入以上内容即可。
实现代码
retrieve.grid.sh 脚本
#!/bin/bash
# retrieve.grid.sh
# 下载 ERA5 气压层 + 地面层数据# 确保使用正确的 Conda 初始化方式
conda activate myenv3.10echo "当前 Python 路径:$(which python)"year=2022
mon=07for dd in 01 02 03 04 05 06 07 08 09 $(seq -w 10 31); doecho "===== 正在下载:${year}-${mon}-${dd} ..."# 替换模板中的占位符sed -e "s/yyyy/${year}/g" -e "s/mm/${mon}/g" -e "s/dd/${dd}/g" grib.pre.2022.baz > grib.pre.pysed -e "s/yyyy/${year}/g" -e "s/mm/${mon}/g" -e "s/dd/${dd}/g" grib.sur.2022.baz > grib.sur.py# 下载气压层echo "===== 下载气压层数据 ..."python grib.pre.pyif [ -f download.grib ]; thenmv download.grib ERA5_PRE_${year}-${mon}-${dd}.gribelseecho "气压层下载失败:ERA5_PRE_${year}-${mon}-${dd}.grib"fi# 下载地面层echo "===== 下载地面层数据 ..."python grib.sur.pyif [ -f download.grib ]; thenmv download.grib ERA5_SUR_${year}-${mon}-${dd}.gribelseecho "地面层下载失败:ERA5_SUR_${year}-${mon}-${dd}.grib"fiecho "完成:${year}-${mon}-${dd}"
done
grib.pre.2022.baz 模板(ERA5 气压层)
#!/usr/bin/env python
import cdsapiclient = cdsapi.Client()client.retrieve("reanalysis-era5-pressure-levels",{"product_type": "reanalysis","variable": ["geopotential", "relative_humidity", "specific_humidity","temperature", "u_component_of_wind", "v_component_of_wind"],"year": "yyyy","month": "mm","day": "dd","time": ["00:00", "01:00", "02:00", "03:00", "04:00", "05:00","06:00", "07:00", "08:00", "09:00", "10:00", "11:00","12:00", "13:00", "14:00", "15:00", "16:00", "17:00","18:00", "19:00", "20:00", "21:00", "22:00", "23:00"],"pressure_level": ["1", "2", "3", "5", "7", "10", "20", "30", "50", "70","100", "125", "150", "175", "200", "225", "250", "300","350", "400", "450", "500", "550", "600", "650", "700","750", "775", "800", "825", "850", "875", "900", "925","950", "975", "1000"],"format": "grib","area": [56, 70, 15, 140]},"download.grib"
)
grib.sur.2022.baz 模板(ERA5 地面层)
#!/usr/bin/env python
import cdsapiclient = cdsapi.Client()client.retrieve("reanalysis-era5-single-levels",{"product_type": "reanalysis","variable": ["10m_u_component_of_wind", "10m_v_component_of_wind","2m_dewpoint_temperature", "2m_temperature","mean_sea_level_pressure", "sea_surface_temperature","surface_pressure", "skin_temperature","snow_density", "snow_depth","soil_temperature_level_1", "soil_temperature_level_2","soil_temperature_level_3", "soil_temperature_level_4","volumetric_soil_water_layer_1", "volumetric_soil_water_layer_2","volumetric_soil_water_layer_3", "volumetric_soil_water_layer_4","land_sea_mask", "sea_ice_cover"],"year": "yyyy","month": "mm","day": "dd","time": ["00:00", "01:00", "02:00", "03:00", "04:00", "05:00","06:00", "07:00", "08:00", "09:00", "10:00", "11:00","12:00", "13:00", "14:00", "15:00", "16:00", "17:00","18:00", "19:00", "20:00", "21:00", "22:00", "23:00"],"format": "grib","area": [56, 70, 15, 140]},"download.grib"
)
运行方式
chmod +x retrieve_era5_2022_07.sh
./retrieve_era5_2022_07.sh
或者直接运行:
bash retrieve_era5_2022_07.sh
终端下载界面如下: