当前位置: 首页 > news >正文

python脚本下载ERA5数据详细规范和教程

python脚本下载ERA5数据详细规范和教程

ECMWF官网:

https://cds.climate.copernicus.eu/

在这里插入图片描述

API请求官方教程:

https://cds.climate.copernicus.eu/api-how-to

下载数据准备工作

注册官网账户,登录生成自己的UID和key

在这里插入图片描述

配置并安装CDS API

创建一个.cdsapirc文件 其实直接新建文本文档后再改也行,如下配置修改保存到C:\Users\用户下
在这里插入图片描述

安装cdsapi库

pip install cdsapi  #根据自己本地环境安装即可

下载数据规范

1.存储路径规范
/path/{产品要素}/{}/{}/{}

采用分要素下载数据文件

2.文件命名规范
ERA5-{year}{month}{day}_{type_str}.grib  #type_str是数据的variable

数据格式统一采用grib或者nc格式

python下载脚本

logging.basicConfig(filename='download_log_ERA5.log',level=logging.INFO,format='%(asctime)s - %(levelname)s - %(message)s')
def create_folder_if_not_exists(path):if not os.path.exists(path):os.makedirs(path)logging.info(f"创建文件夹: {path}")else:logging.info(f"文件夹已存在: {path}")def is_valid_date(year, month, day):try:request_date = datetime(int(year), int(month), int(day))current_date = datetime.now()latest_era5_date = current_date - timedelta(days=5)if request_date > latest_era5_date:logging.error(f"请求日期{request_date}超过最新可用日期{latest_era5_date}")return Falsereturn Trueexcept ValueError as e:logging.error(f"无效日期: {year}-{month}-{day}, 错误: {e}")return Falsedef down(year, month, day, level, variables, type_str, path, retries=3, delay=60):if not is_valid_date(year, month, day):returnmonth = f"{int(month):02d}"day = f"{int(day):02d}"dataset = "reanalysis-era5-pressure-levels"request = {'product_type': 'reanalysis','variable': variables,'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'],'pressure_level': level,'area': [90, -180, -90, 180], # 全球'format': 'grib'}client = cdsapi.Client()date_str = f"{year}/{month}/{day}"folder_path = os.path.join(path, date_str)file_name = f"ERA5-{year}{month}{day}_{type_str}.grib"file_path = os.path.join(folder_path, file_name)for attempt in range(retries):try:create_folder_if_not_exists(folder_path)logging.info(f"开始下载: {date_str} {type_str}")client.retrieve(dataset, request, file_path)logging.info(f"下载成功: {file_path}")returnexcept Exception as e:logging.error(f"下载失败: {e},尝试 {attempt + 1}/{retries}")if attempt < retries - 1:time.sleep(delay)else:logging.error(f"全部重试失败: {date_str}")with open("part.json", encoding='utf-8') as f:content = json.load(f)for c in content:year = c['year']month = c['month']day = c['day']if not is_valid_date(year, month, day):continuefor type_var in c['variableUPAR']:base_path = "/ERA5/"# 处理组合变量情况/风场数据if type_var == 'uv_component_of_wind':variables = ['u_component_of_wind', 'v_component_of_wind']type_str = 'uv_component_of_wind'else:variables = [type_var]type_str = type_vardown(year, month, day, c['level'], variables, type_str, base_path)

注意事项

下载时间维度、空间维度、时间维度、产品选择在脚本中可根据需求修改

下载完的样例

在这里插入图片描述
在这里插入图片描述

http://www.xdnf.cn/news/217783.html

相关文章:

  • Mysql中索引的知识
  • c#栈及其应用
  • 生物信息学常用软件InSequence,3大核心功能,简易好上手
  • PyTorch 深度学习实战(23):多任务强化学习(Multi-Task RL)之扩展
  • Redis Sentinel 和 Redis Cluster 各自的原理、优缺点及适用场景是什么?
  • pStubMsg--MemorySize0x74字节是如何分配的之rpcrt4!NdrAllocate函数分析
  • 项目三 - 任务1:采用面向对象方式求三角形面积
  • 大模型落地难题:如何用LoRA低成本微调企业私有模型?
  • 信道估计--最小均方误差(MMSE)
  • 解锁植被参数反演密码:AI 与 Python 的融合之道
  • 深入理解过拟合:机器学习中的常见陷阱
  • 软考高项(信息系统项目管理师)第 4 版全章节核心考点解析(力扬老师课程精华版)
  • qtfaststart使用教程(moov置前)
  • CC52.【C++ Cont】滑动窗口
  • Arthas在Java程序监控和分析中的应用
  • ChatDLM Technical Report 介绍与分析
  • oracle怎样通过固化较优执行计划来优化慢sql
  • 信息学奥赛一本通 1454:山峰和山谷
  • < 自用文 rclone > 在 Ubuntu 24 访问 Google Drive 网络内容
  • 双剑合璧:融合视觉基础与语言模型,勇闯未知领域的语义分割新框架
  • Linux开发中的线程管理(C++11 std::thread)
  • Pytorch 反向传播
  • 塔能照明节能服务流程:精准驱动工厂能耗优化
  • leetcode:3005. 最大频率元素计数(python3解法)
  • 第三次作业(密码学)
  • 【android bluetooth 协议分析 06】【l2cap详解 11】【l2cap连接超时处理逻辑介绍】
  • (29)VTK C++开发示例 ---绘制两条彩色线
  • 想做博闻强记的自己
  • IoTDB数据库建模与资源优化指南
  • Python中的defaultdict方法