使用Python脚本从 Copernicus Climate Data Store (CDS) 检索气象数据

具体地,需要检索变量(geopotential、relative_humidity、temperature、u_component_of_wind、v_component_of_wind、vertical_velocity)在各种不同的压力水平、不同的日期和时间、以及在特定地理区域内的值。

使用了 CDS API 客户端来执行检索,保存结果到 NetCDF 格式的文件中,文件名是由年、月、日和时间组成的。

首先进入该网站

ERA5 hourly data on pressure levels from 1959 to present (copernicus.eu)

勾选想要下载的数据范围和变量

生成api

但是不能直接复制,右键网页的任意位置,点击 “检查”

点击红色框圈选的按钮,之后将鼠标移动到代码部分,单击左键

右侧界面就会自动跳转到这段代码对应的网页脚本,点击<pre前面的箭头,将这段脚本展开

右键后,选择编辑文本 或 编辑为HTML,就可以复制代码了

代码如下,最后所有数据都会下载到一个名为download.nc的文件中

import cdsapic = cdsapi.Client()c.retrieve('reanalysis-era5-pressure-levels',{'product_type': 'reanalysis','format': 'netcdf','variable': ['geopotential', 'relative_humidity', 'temperature','u_component_of_wind', 'v_component_of_wind', 'vertical_velocity',],'pressure_level': ['450', '500', '550','600', '650', '700','750', '775', '800','825', '850', '875','900', '925', '950','975', '1000',],'month': ['01', '02', '03','04', '05', '06','07', '08', '09','10', '11', '12',],'day': ['01', '02', '03','04', '05', '06','07', '08', '09','10', '11', '12','13', '14', '15','16', '17', '18','19', '20', '21','22', '23', '24','25', '26', '27','28', '29', '30','31',],'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',],'area': [35.5, 116, 30,122,],'year': ['2017', '2018', '2019','2020', '2021', '2022',],},'download.nc')

当数据量较大的时候,该文件难以读取,导致无法进一步对数据进行分析。这个时候就需要将大数据进行细分处理,我采取的办法是通过循环的方法按小时读取数据。

一年有365天,一天有24小时,一共5年的数据,也就是说有5*365*24=43800个文件,我通过年月时日的格式对这些文件命名,如2017010421.nc文件表示的是2017年1月4日21时的数据。

同时,因为下载的时候容易受网络影响中断下载,万一下载了20000个文件的时候中途断开了,重新运行代码又要重复下载,因此我引入os库判断目标文件是否已经存在,存在则跳过。

最后,2月没有30天,每个月的天数不完全相同,默认31天会导致CDS服务器报错。引入calendar库,判断当前年,当前月份有几天。最后生成字符串列表,不足两位的需要在前面补零。

import cdsapi
import os
import calendarvariables = ['geopotential', 'relative_humidity', 'temperature','u_component_of_wind', 'v_component_of_wind', 'vertical_velocity'
]pressure_levels = ['400', '450', '500','550', '600', '650','700', '750', '775','800', '825', '850','875', '900', '925','950', '975', '1000'
]years = ['2017', '2018', '2019','2020', '2021', '2022'
]months = ['01', '02', '03','04', '05', '06','07', '08', '09','10', '11', '12'
]days = ['01', '02', '03','04', '05', '06','07', '08', '09','10', '11', '12','13', '14', '15','16', '17', '18','19', '20', '21','22', '23', '24','25', '26', '27','28', '29', '30','31'
]times = ['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'
]area = [35.5, 116, 30, 122]c = cdsapi.Client()
for year in years:for month in months:num_days = calendar.monthrange(int(year), int(month))[1]days = [str(i).zfill(2) for i in range(1, num_days+1)]for day in days:for time in times:saveas = year + month + day + time[:2] + '.nc'if os.path.isfile(saveas):# print(f"{saveas} 已存在,跳过下载")continuerequest = {'product_type': 'reanalysis','format': 'netcdf','variable': variables,'pressure_level': pressure_levels,'year': year,'month': month,'day': day,'time': time,'area': area,}c.retrieve('reanalysis-era5-pressure-levels', request, saveas)

os库和calendar库都是python自带的,而cdsapi库需要自行安装,进入命令行,输入

pip install cdsapi -i https://pypi.tuna.tsinghua.edu.cn/simple/

写在最后,如果运行代码出现如下报错信息,是因为没有在用户目录下配置cds的api调用许可文件,具体解决办法参考下面这篇博客即可。

Exception: Missing/incomplete configuration file: C:\Users\Administrator/.cdsapirc

Python使用CDS API时,报Exception: Missing/incomplete configuration错误_没有文件叫cdsapi_bug嘛我经常写的博客-CSDN博客

Python脚本使用CDSAPI批量下载ERA5气象数据相关推荐

  1. Python批量下载CHIRPS气象数据并完成解压裁剪等

    文章目录 前言 一.CHIRPS是什么? 二.实现步骤 1.下载数据 2.解压缩 3.批量裁剪 三.完整代码如下 四.代码结果 前言   最近需要下载气象数据--CHIRPS,借助之前学的批量下载哨兵 ...

  2. Python 批量下载 ERA-5 Reanalysis 数据

    ECMWF大气再分析数据集 ERA-interim 已被 ERA-5 数据集取代,ERA-5 详细信息看这里 下面介绍下载的具体步骤: 1. 要下载 ERA-5 数据集,需要先注册一个 CDS 账号. ...

  3. 批量下载ERA5数据(Python+IDM)

    本文介绍了如何通过Python脚本和Internet Download Manager(IDM)软件批量下载ERA5数据. 1. ERA5数据简介 ERA5是第五代ECMWF大气再分析全球气候数据,该 ...

  4. 2021-03-10 Python多线程爬虫快速批量下载图片

    Python多线程爬虫快速批量下载图片 1.完成这个需要导入的模块 urllib,random,queue(队列),threading,time,os,json 第三方模块的安装 键盘win+R,输入 ...

  5. python读取哨兵卫星数据_科学网—【Python】批量下载Sentinel-2卫星数据 - 江佳乐的博文...

    简介:本文介绍了一种基于Python批量下载Sentinel-2卫星数据的方法.通过该方法,用户可自定义感兴趣研究区(ROI).限定时间范围.选择产品类别.进行云量筛选,实现自动化批量下载Sentin ...

  6. python写的一个-批量下载股票年报的小工具

    python写的一个-批量下载股票年报的小工具 from urllib import request import requests import os import openpyxl# print( ...

  7. Python爬虫——利用Scrapy批量下载图片

    Python爬虫--利用Scrapy批量下载图片 Scrapy下载图片项目介绍 使用Scrapy下载图片 项目创建 项目预览 创建爬虫文件 项目组件介绍 Scrapy爬虫流程介绍 页面结构分析 定义I ...

  8. 【Python】使用CDS API下载ECMWF气候数据

    [Python]使用CDS API下载ECMWF气候数据 数据集简介 最近需要气象数据算东西,找到EC的数据~ECMWF是欧洲中期天气预报中心,他们的ERA模型提供全球的气象再分析和预报数据,最新的数 ...

  9. 【linux 上批量下载amazon s3数据】

    linux 上批量下载amazon s3数据 linux 上批量下载amazon s3数据 linux 上批量下载amazon s3数据 最近导师喊我下载amazon s3上的数据传到服务器上,没用过 ...

最新文章

  1. linux svn 使用
  2. 使用DjangoUeditor将Ueditor移植到Django(BAE环境下)
  3. SQL2005 四个排名函数(row_number、rank、dense_rank和ntile)的比较
  4. SSH SecureShell Client的使用
  5. B - Bone Collector (01背包)
  6. 服务器虚拟机网卡怎么配置文件,VMWARE复制虚拟机之后,需重新配置网卡(CENTOS 6)...
  7. Storm 02_Storm 计算模型
  8. 如何获取微信API的Access Token
  9. 为什么 12306 时不时要崩那么一下?
  10. Delphi编程 -- 如何实现一个支持Visual Basic的For Each调用的COM对象
  11. 在虚拟机中配置FastDFS+Nginx模块
  12. 管理感悟:你是产品的第一个用户
  13. 网易云音乐云盘上传歌词的方法
  14. UML的简单介绍和画法
  15. 关于ABAP调试中的F5,F6,F7,F8的区别和用法
  16. 分享基于SpringBoot2+MybatiPlus+LayUI+Snaker+Mysql技术前后端分离开源后台管理系统脚手架
  17. iOS NSString,NSLog添加%百分号和引号等符号
  18. gromacs 安装_gromacs5.x 在linux安装
  19. 大数据在互联网行业的应用
  20. linux打开python3_号外:RIDE 可以在 linux+python3 的环境中运行啦!

热门文章

  1. 记一次驴唇不对马嘴的DIY之旅(七)
  2. 计算机辅助管理施工模板,建筑施工模板计算机辅助设计系统
  3. cbam block and senet  block
  4. 【id:52】【20分】D. 软件备份(拷贝构造函数)
  5. lunece的第三方中文分词器预研
  6. 基于微信小程序+SSM的校园生活小助手系统设计与实现 文档+项目源码及数据库文件+安装及演示视频+运行说明
  7. 地质年代及地层时序表
  8. 18_小米监控Open-Falcon:Rabbitmq监控
  9. Java+uniapp漫画软件
  10. Python 字典 dict 以及collections里面的defaultdict