目录
气象驱动数据-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.10
echo "当前 Python 路径:$(which python)"
year=2022
mon=07
for dd in 01 02 03 04 05 06 07 08 09 $(seq -w 10 31); do
echo "===== 正在下载:${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.py
sed -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.py
if [ -f download.grib ]; then
mv download.grib ERA5_PRE_${year}-${mon}-${dd}.grib
else
echo "气压层下载失败:ERA5_PRE_${year}-${mon}-${dd}.grib"
fi
# 下载地面层
echo "===== 下载地面层数据 ..."
python grib.sur.py
if [ -f download.grib ]; then
mv download.grib ERA5_SUR_${year}-${mon}-${dd}.grib
else
echo "地面层下载失败:ERA5_SUR_${year}-${mon}-${dd}.grib"
fi
echo "完成:${year}-${mon}-${dd}"
done
grib.pre.2022.baz 模板(ERA5 气压层)
#!/usr/bin/env python
import cdsapi
client = 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 cdsapi
client = 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
终端下载界面如下: