下载一段时间的ERA5的资料

该代码段展示了一个Python脚本,用于从欧洲中期天气预报中心(ECMWF)的CDS API下载ERA5再分析陆地数据。脚本首先定义了时间范围,并生成相应的时间序列DataFrame。然后,通过遍历时间序列,调用CDSAPI逐小时下载指定类型的气象数据(如风速、风向和降水量)并保存为NetCDF文件。

主要参考了这篇文章
网站注册后点击这里查看url和key
我增加了定义时间段的部分和保存文件名的部分。
以下是代码

import datetime
import time
from datetime import timedelta
import pandas as pd```

def get_time_df(start_time_btc,end_time_btc):
    #转换为世界时
    start_time_t_utc = datetime.datetime.strptime(start_time_btc,'%Y.%m.%d.%H')-timedelta(hours = 8)
    end_time_t_utc = datetime.datetime.strptime(end_time_btc,'%Y.%m.%d.%H')-timedelta(hours = 8)
    #计算有多少时次
    n = (end_time_t_utc - start_time_t_utc).seconds/3600+1
    #生成间隔一小时、世界时的时间序列
    time_s = pd.date_range(start=start_time_t_utc,periods=n,freq='H')
    #生成时间序列df
    time_df = pd.DataFrame({'时间戳(世界时)':time_s})
    #得到年月日时列
    time_df['年'] = time_df['时间戳(世界时)'].apply(lambda x: str(x.year).zfill(4))
    time_df['月'] = time_df['时间戳(世界时)'].apply(lambda x: str(x.month).zfill(2))
    time_df['日'] = time_df['时间戳(世界时)'].apply(lambda x: str(x.day).zfill(2))
    time_df['时'] = time_df['时间戳(世界时)'].apply(lambda x: str(x.hour).zfill(2)+':00')
    #返回
    return time_df

def download_ERA5(data_type,time_df):
    import cdsapi
    import urllib3
    urllib3.disable_warnings()
    c = cdsapi.Client()
    
    for i in range(len(time_df)):
        year = time_df.loc[i,'年']
        mon = time_df.loc[i,'月']
        day = time_df.loc[i,'日']
        hour = time_df.loc[i,'时']
        #逐文件下载
        c.retrieve(
           data_type,
            {
                'format': 'netcdf',
                'variable': [
                    '10m_u_component_of_wind', '10m_v_component_of_wind', 'total_precipitation',
                ],
                'year': year,
                'month': mon,
                'day': day,
                'time':hour,
            },
            'CDS%s%s%s%s.nc'% (year,mon,day,hour.split(':')[0]))

if __name__ == "__main__":
    #设置下载的起始时间,北京时
    start_time_btc = '2021.03.23.00'
    end_time_btc = '2021.03.23.08'
    #生成时间df
    time_df = get_time_df(start_time_btc,end_time_btc)
    #设置资料类型
    data_type =  'reanalysis-era5-land'
    #下载
    download_ERA5(data_type,time_df)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值