- 积分
- 88
- 贡献
-
- 精华
- 在线时间
- 小时
- 注册时间
- 2016-3-23
- 最后登录
- 1970-1-1
|
楼主 |
发表于 2022-3-18 11:29:18
|
显示全部楼层
解决方案:
# -*- coding: utf-8 -*-
"""
下载ERA5 daily数据
"""
import cdsapi
import requests
import time
# CDS API script to use CDS service to retrieve daily ERA5* variables and iterate over
# all months in the specified years.
# Requires:
# 1) the CDS API to be installed and working on your system
# 2) You have agreed to the ERA5 Licence (via the CDS web page)
# 3) Selection of required variable, daily statistic, etc
# Output:
# 1) separate netCDF file for chosen daily statistic/variable for each month
c = cdsapi.Client(timeout=300)
# Uncomment years as required
years = [
#'1979', '1980', '1981',
#'1982', '1983', '1984',
#'1985', '1986', '1987',
#'1988', '1989', '1990',
#'1991', '1992', '1993',
#'1994', '1995', '1996',
'1997', '1998', '1999',
'2000', '2001', '2002',
'2003', '2004', '2005',
'2006', '2007', '2008',
'2009', '2010', '2011',
'2012', '2013', '2014',
'2015', '2016', '2017',
'2018', '2019', '2020',
#'2021'
]
# Retrieve all months for a given year.
months = [ '01', '02', '03',
'04', '05', '06',
'07', '08', '09',
'10', '11', '12'
]
# For valid keywords, see Table 2 of:
# https://datastore.copernicus-climate.eu/documents/app-c3s-daily-era5-statistics/C3S_Application-Documentation_ERA5-daily-statistics-v2.pdf
# select your variable; name must be a valid ERA5 CDS API name.
var = '10m_u_component_of_wind'
# Select the required statistic, valid names given in link above
stat = "daily_mean" # daily_maximum, daily_minimum, daily_mean
# Loop over years and months
for yr in years:
for mn in months:
while True:
try:
result = c.service(
"tool.toolbox.orchestrator.workflow",
params={
"realm": "c3s",
"project": "app-c3s-daily-era5-statistics",
"version": "master",
"kwargs": {
"dataset": 'reanalysis-era5-land',
#"product_type": 'reanalysis', # 下载地面数据时不需要
"variable": var,
"statistic": stat,
"year": yr,
"month": mn,
"time_zone": "UTC+00:0",
"frequency": "1-hourly",
#
# Users can change the output grid resolution and selected area
#
"grid": "0.5/0.5", # 0.1/0.1, 0.25/0.25, 0.5/0.5, 1.0/1.0
# "area":{"lat": [10, 60], "lon": [65, 140]}
},
"workflow_name": "application"
})
# set name of output file for each month (statistic, variable, year, month
file_name = "download_" + stat + "_" + var + "_" + yr + "_" + mn + ".nc"
location=result[0]['location']
res = requests.get(location, stream = True)
print("Writing data to " + file_name)
with open(file_name,'wb') as fh:
for r in res.iter_content(chunk_size = 1024):
fh.write(r)
fh.close()
except:
print('下载出错4S后重试')
print('------------------------------------------------------------------------------------')
time.sleep(4)
continue
else:
time.sleep(4)
break #下载成功就跳出循环 |
|