python处理era5_python批量下载EC—ERA5再分析资料

  • Post author:
  • Post category:python


说明

我重新补充一下,整理如下

1. 注册账户获得key。

文件名(须注意在字符串前面有个.): .cdsapirc

文件位置:C:\Users[name],这里[name]是你的电脑的名字,例如C:\Users\zhzh

55c65894a1f7?from=singlemessage

image.png

文件内容:

55c65894a1f7?from=singlemessage

image.png

URL一行是固定的内容, 第二行中包括两个部分的信息,其中UID和APIKey在账号登录后可以找到

55c65894a1f7?from=singlemessage

image.png

2. 安装cdsapi

可以直接运行cmd,在命令行里输入pip install cdsapi,运行之后即可

55c65894a1f7?from=singlemessage

image.png

设置

如果建立的文件夹为ERA5_dl作为程序的工程位置,在pycharm运行环境中File>settings>Project:ERA_dl

点+号添加cdsapi

55c65894a1f7?from=singlemessage

image.png

3. 下载数据

[以下内容来自网络,暂时还没有测试。。。2019-09-23]

#!/usr/bin/env python

import cdsapi

c = cdsapi.Client()

c.retrieve(

‘reanalysis-era5-single-levels’,

{

‘product_type’:’reanalysis’,

‘variable’:[

‘total_column_ozone’,’total_column_water_vapour’

],

‘year’:’2019′,

‘month’:’01’,

‘day’:’23’,

‘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’:’netcdf’

},

‘download.nc’)

这里只能下载单一时间,而且数据名为 ‘download.nc’。

我希望将我想下载的时间存入txt(时间文件inputpar.txt),直接批量下载,数据存储形式改为CDS+时间,代码如下:

# author = yc

import cdsapi

def download_cds():

c = cdsapi.Client()

lines = open(“inputpar.txt”, ‘r’).readlines()

for i in range(len(lines)):

if i%2==0:

fields = lines[i].split(‘ ‘) #split data

year = fields[0]

month = fields[1]

day = fields[2]

print(‘Download %s-%s-%s data’% (year,month,day))

c.retrieve(

‘reanalysis-era5-single-levels’,

{

‘product_type’: ‘reanalysis’,

‘variable’: [

‘total_column_ozone’,

‘total_column_water_vapour’

],

‘year’: year,

‘month’: month,

‘day’: day,

‘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’: ‘netcdf’

},

‘CDS%s%s%s’% (year,month,day)+’.nc’)

print(‘Datafile CDS%s%s%s’% (year,month,day)+’.nc download successful’)

else:

pass

if __name__ == ‘__main__’:

download_cds()