由于改版,从ECMWF上获取数据需要通过API访问,本文提供了python代码批量下载数据的方法
下面网址提供了再分析数据(reanalysis dataset),也就是长序列气象数据
https://www.ecmwf.int/en/forecasts/datasets/browse-reanalysis-datasets
(当然这个网站也提供了一些实时数据,但其获取方式不是本文的关注点)
1、首先需要注册一个账户,方便网站为你提供API的key
https://apps.ecmwf.int/registration/
2、将API的key储存为一个.ecmwfapirc文件
https://api.ecmwf.int/v1/key/ 在这个网站得到自己账户申请下来的key
创建前导点.ecmwfapirc文件官方的方法是:
①新建一个txt文本,将下面这三行代码复制进去,然后保存
②把文件重命名为.ecmwfapirc.(注意前后都有点),然后就可以了
but,我这样怎么试都没有成功,所以在这里提供另一种方法
打开cmd,将路径转为你想放置文件的位置,然后输入
就得到一个类型为ecmwfapirc的文件
最后用记事本打开该文件,把三行key的信息粘进去并保存文件
Windows用户: 将文件存在 C:\Users<USERNAME>.ecmwfapirc (一般是这个路径下)
3、安装python支持库
需要依靠他们自己开发的第三方类库
打开cmd(任意路径),
输入以下命令后,静待安装成功
pip install https://software.ecmwf.int/wiki/download/attachments/56664858/ecmwf-api-client-python.tgz
也可以选择先在网上下载好ecmwf-api-client-python.tgz文件
https://software.ecmwf.int/wiki/download/attachments/56664858/ecmwf-api-client-python.tgz
然后再pip install
4、python代码批量获取气象数据
在开头提供的网址逛一下,可以找到不少数据集,点开以后就是选择一下想下载数据时间,种类什么的
选好以后点击view the MARS request 就可以拿到他们自行生成的结构体
你可以仅查看python版本的,然后复制到你的python集成开发环境
观察这个结构会发现,其实这样明白这些字段的含义,就完全不用在网站上点啊点
可以通过更改参数设置来批量获取,你也可以把它放到循环体中,每次循环变更参数
##参数说明
1、type是输出格式,这里你可以改成netcdf (.nc),或者grid
2、target是输出路径+文件名,可以使用相对路径,只给文件名表示放在和.py文件相同的路径下
3、可以新加一个'area': "LatMax/LongMin/LatMin/LongMax",
来通过经纬度选择子区域(默认是获得全球资料)
参考代码(批量获得中国月平均风场数据)
from ecmwfapi import ECMWFDataServer
server = ECMWFDataServer()
level=['1000','700','500']
direction=['U','V']
param=['131.128','132.128']
dates="20150101/20150201/20150301/20150401/20150501/20150601/20150701/20150801/20150901/20151001/20151101/20151201"
for l in range(0,3):
for p in range(0,2):
filename=direction[p] + level[l] + ".nc"
server.retrieve({
"class": "ei",
"dataset": "interim",
"date": dates,
"expver": "1",
"grid": "0.75/0.75",
"levelist": level[l],
"levtype": "pl",
"param": param[p],
"stream": "moda",
"type": "an",
'area': "60/70/17/138",
'format': "netcdf",
"target": filename,
})
print('********************************')
print('finish')
print(filename)