基于python下载ERA5小时尺度和月尺度的数据
前言:由于ERA5网站的更新,原始的代码都无法使用,这里将会提供下载小时尺度和月尺度的代码。
一、前期的工作
需要重新在ERA5网站上注册新的账号(ERA5网站)。然后在User guide里,选择API,将代码复制到文本里,将文本的名字改为:.cdsapirc。然后将文本放在C盘用户的下面。此外需要下载IDMan.exe,CSDN上有很多教程。
二、下载小时尺度的代码
import cdsapi
import calendar
from subprocess import call
import time
from cdsapi import Client, api
def idmDownloader(task_url, folder_path, file_name):
""" IDM下载器 """
idm_engine = r"D:\\IDM\\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"],
"variable": ["surface_solar_radiation_downwards"],
# "variable": ["surface_solar_radiation_downwards", "surface_thermal_radiation_downwards", "surface_pressure",
# "2m_temperature", "2m_dewpoint_temperature"],
"year": [],
"month": [],
"day": [],
"time": [ "17:00"],
"data_format": "netcdf",
"area": [41, -87, 39, -85],
"download_format": "unarchived"
}
for y in [2013]:
for m in range(5, 9):
day_num = calendar.monthrange(y, m)[1]
for d in range(1, day_num + 1):
dic['year'] = str(y)
dic['month'] = str(m).zfill(2)
dic['day'] = str(d).zfill(2)
r=c.retrieve('reanalysis-era5-land', dic)
url = r.location
path = r'F:\PhD\urbanET_downscaled\ERA5\rsd_17'
filename = str(y) + str(m).zfill(2) + str(d).zfill(2) + 'rsd17.nc'
idmDownloader(url, path, filename)
三、下载月尺度的代码
import urllib3
urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)
import cdsapi
import calendar
from subprocess import call
def idmDownloader(task_url, folder_path, file_name):
""" IDM下载器 """
idm_engine = r"D:\\IDM\\Internet Download Manager\\IDMan.exe"
call([idm_engine, '/d', task_url, '/p', folder_path, '/f', file_name, '/a'])
call([idm_engine, '/s'])
c = cdsapi.Client()
dic = {
'product_type': 'monthly_averaged_reanalysis',
'variable': 'total_precipitation',
'year': [],
'month': [],
'time': '00:00',
'area': [90, -180, -90,
180,],
'data_format': 'netcdf',
'download_format': 'unarchived'
}
for y in range (2003,2020):
for m in range (1,13):
dic['year'] = str(y)
dic['month'] = str(m).zfill(2)
# name = str(y)+str(m).zfill(2)+'.nc'
r=c.retrieve('reanalysis-era5-land-monthly-means',dic)
url = r.location
path = r'F:\PhD\Mult_year_ET\Pre\nc'
# filename = 'F:\\PhD\\Mult_year_ET\\Pre\\nc\\' + str(y) + str(m).zfill(2) + '_pre.nc'
filename = str(y) + str(m).zfill(2) + '_pre.nc'
idmDownloader(url, path, filename)
print(filename)
以上代码可以满足小时尺度和月尺度对ERA5在分析资料数据的下载。
长路漫漫…
唯有坚持…