ERA5 hourly data批量下载与cdo处理(一)

摸索了两天,我这个小白终于搞定了!主要分为两个部分:(1)ERA数据的批量下载;(2) 应用cdo将小时数据转化为日数据,本篇文章主要介绍第一部分。

一、ERA5数据批量下载

1. 准备工作

包括注册CDS账号、获取API key、配置并安装CDS API、安装和配置IDM,  此部分主要参考批量下载ERA5数据(Python+IDM)_菩提有树的博客-CSDN博客_era5下载,博主写的非常详细

2. 批量下载

这里以获取ERA5-Land hourly data from 1950 to present数据集中的2m 温度为例,在页面中根据自己的需要选择数据(Copernicus Climate Data Store |)。

下载2021年中国的2m温度日数据nc

ERA5 hourly data批量下载与cdo处理(一)_第1张图片

ERA5 hourly data批量下载与cdo处理(一)_第2张图片

ERA5 hourly data批量下载与cdo处理(一)_第3张图片

ERA5 hourly data批量下载与cdo处理(一)_第4张图片

条件设置完成之后,点击左下角的Show API request,获取如下代码

import cdsapi

c = cdsapi.Client()

c.retrieve(
    'reanalysis-era5-land',
    {
        'variable': '2m_temperature',
        'year': '2021',
        'month': [
            '01', '02', '03',
            '04', '05', '06',
            '07', '08', '09',
            '10', '11', '12',
        ],
        'day': [
            '01', '02', '03',
            '04', '05', '06',
            '07', '08', '09',
            '10', '11', '12',
            '13', '14', '15',
            '16', '17', '18',
            '19', '20', '21',
            '22', '23', '24',
            '25', '26', '27',
            '28', '29', '30',
            '31',
        ],
        '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',
        ],
        'area': [
            60, 70, 0,
            140,
        ],
        'format': 'netcdf',
    },
    'download.nc')

 以上述代码为基础,采用Python+IDM方式(此方法同样也是参考批量下载ERA5数据(Python+IDM)_菩提有树的博客-CSDN博客_era5下载,以实现更快的下载速度)批量下载数据,运行代码时需要打开IDM软件,完整代码如下。

import cdsapi
import calendar
from subprocess import call

import urllib3
urllib3.disable_warnings()

def idmDownloader(task_url, folder_path, file_name):
    """
    IDM下载器
    :param task_url: 下载任务地址
    :param folder_path: 存放文件夹
    :param file_name: 文件名
    :return:
    """
    # IDM安装目录
    idm_engine = "C:\\Program Files (x86)\\Internet Download Manager\\IDMan.exe"
    # 将任务添加至队列
    call([idm_engine, '/d', task_url, '/p', folder_path, '/f', file_name, '/a'])
    # 开始任务队列
    call([idm_engine, '/s'])


if __name__ == '__main__':
    c = cdsapi.Client()  # 创建用户

    # 数据信息字典
    dic = {
        'product_type': 'reanalysis-era5-land',  # 产品类型
        'format': 'netcdf',  # 数据格式
        'variable': '2m_temperature',  # 变量名称
        'year': '2021',  # 年,设为空
        'month': [
            '01', '02', '03',
            '04', '05', '06',
            '07', '08', '09',
            '10', '11', '12',
        ],
        'day': [
            '01', '02', '03',
            '04', '05', '06',
            '07', '08', '09',
            '10', '11', '12',
            '13', '14', '15',
            '16', '17', '18',
            '19', '20', '21',
            '22', '23', '24',
            '25', '26', '27',
            '28', '29', '30',
            '31',
        ],
        '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',
        ],
        'area': [60, 70, 0,140,],
    }


    r = c.retrieve('reanalysis-era5-land', dic,)      # 文件下载器
    url = r.location  # 获取文件下载地址
    path = 'E:\\era'  # 存放文件夹
    filename = 'tem2021.nc' # 文件名
    idmDownloader(url, path, filename)  # 添加进IDM中下载

 纯小白,有什么问题可以一起交流呀~

你可能感兴趣的:(ERA5,python,ubuntu,pip)