批量下载ERA5数据

批量下载ERA5数据


文章目录


前言

提示:这里可以添加本文要记录的大概内容:

例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。


提示:以下是本篇文章正文内容,下面案例可供参考

一、ERA5数据介绍

ERA5数据是ERA5官网

二、下载步骤

1.生成下载示例代码

代码如下(示例):

bash 复制代码
import cdsapi

dataset = "reanalysis-era5-pressure-levels-monthly-means"
request = {
    "product_type": ["monthly_averaged_reanalysis"],
    "variable": ["geopotential"],
    "pressure_level": ["300"],
    "year": [
        "1971", "1972", "1973",
        "1974"
    ],
    "month": [
        "01", "02", "03",
        "04", "05", "06",
        "07", "08", "09",
        "10", "11", "12"
    ],
    "time": ["00:00"],
    "data_format": "grib",
    "download_format": "unarchived"
}

client = cdsapi.Client()
client.retrieve(dataset, request).download()

2.生成批量下载的链接

代码如下(示例):

python 复制代码
import os
import logging
import argparse
import cdsapi

# Configure logging
logging.basicConfig(filename="download.log", level=logging.INFO,
                    format="%(asctime)s - %(levelname)s - %(message)s")

# Initialize CDS API client
c = cdsapi.Client()

# Function to make CDS API request
def cdsapi_request(var, year, area=None):
    if area is None:
        # Set to global area: North, West, South, East
        area = [90, -180, -90, 180]
    dataset = "derived-era5-single-levels-daily-statistics"
    request = {
        "product_type": "reanalysis",
        "variable": [var],
        "year": year,
        "month": [f"{m:02d}" for m in range(1, 13)],
        "day": [f"{d:02d}" for d in range(1, 32)],
        "daily_statistic": "daily_sum",
        "time_zone": "utc+00:00",
        "frequency": "1_hourly",
        "area": area,
        "format": "netcdf"
    }
    try:
        r = c.retrieve(dataset, request)
        file_name = f"ERA5_{var}_{year}_daily_sum.nc"
        logging.info(f"Request prepared for variable: {var} year: {year}")
        return r.location, file_name
    except Exception as e:
        logging.error(f"CDS API request failed for {var} {year}: {e}")
        raise

# Save download links and filenames
def save_download_info(var, data_path, data_name, output_dir):
    try:
        with open(os.path.join(output_dir, f"{var}_data_path.txt"), "a") as f:
            f.write(data_path + "\n")
        with open(os.path.join(output_dir, f"{var}_data_name.txt"), "a") as f:
            f.write(data_name + "\n")
        logging.info(f"Saved link and file name for {var}: {data_name}")
    except Exception as e:
        logging.error(f"Error saving download info for {var}: {e}")
        raise

# Main function
def main():
    parser = argparse.ArgumentParser(description="Generate ERA5 download links and filenames for each year.")
    parser.add_argument("-v", "--variables", nargs="+", required=True, help="List of variables to download")
    parser.add_argument("-y", "--years", nargs="+", default=[str(y) for y in range(1980, 2006)], help="Years to download")
    parser.add_argument("-o", "--output_dir", default="E:/dataset/ERA5/daily/globe", help="Output directory for downloaded files")
    parser.add_argument("-a", "--area", nargs=4, type=float, help="Bounding box: N W S E (e.g. 90 -180 -90 180 for global)")

    args = parser.parse_args()

    if not os.path.exists(args.output_dir):
        os.makedirs(args.output_dir)

    for var in args.variables:
        for year in args.years:
            try:
                url, file_name = cdsapi_request(var, year, area=args.area)
                save_download_info(var, url, file_name, args.output_dir)
            except Exception as e:
                logging.error(f"Error generating download info for {var} {year}: {e}")

if __name__ == "__main__":
    main()
c 复制代码
调用示例:
python 复制代码
python ERA5dowanload.py 

总结

提示:这里对文章进行总结:

例如:以上就是今天要讲的内容,本文仅仅简单介绍了pandas的使用,而pandas提供了大量能使我们快速便捷地处理数据的函数和方法。

相关推荐
李可以量化24 分钟前
Tornado 部署公域网络安全与防护(上)
python
风跟我说过她35 分钟前
SQL 一键转经典 Chen 风格 ER 图:开源 CLI + 在线工具 + Agent Skill
数据库·python·sql·开源·开源软件
Ulyanov1 小时前
AudioVision Pro:基于 PySide6 + sounddevice 的实时音频可视化播放器设计
python·算法·音视频
ID34610744201 小时前
【课程设计】基于Spring Boot+Vue的校园共享无人机服务系统设计与实现-计算机毕设 附源码44219
javascript·vue.js·spring boot·python·node.js·php·课程设计
星空1 小时前
pycharm复习
ide·python·pycharm
Maiko Star1 小时前
Python 包与项目管理工具——uv
python·uv
weixin199701080161 小时前
[特殊字符]《京东POP二手品类对接:B2C订单模型 vs 二手C2C属性的字段转换难题》(附Python源码)
前端·python·算法
承渊政道1 小时前
Python IDLE鸿蒙PC适配全记录:从Tkinter桌面程序到ArkUI原生开发闭环
开发语言·python·harmonyos·鸿蒙系统·桌面程序
人工干智能2 小时前
爱因斯坦求和约定(Einstein Summation Convention)及einsum() 函数
python
YMWM_2 小时前
查看realsense相机序列号脚本
开发语言·python·数码相机