批量下载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提供了大量能使我们快速便捷地处理数据的函数和方法。

相关推荐
ss2735 小时前
AI全栈实战 | 3.2-01 Python 基础:四大数据容器怎么选,推导式为什么是 Pythonic 的灵魂
开发语言·人工智能·python
计算机毕业编程指导师5 小时前
【大数据毕设选题推荐】基于Spark的WTA职业网球赛事演变与竞技格局分析系统源码 毕业设计 选题推荐 毕设选题 数据分析 机器学习 深度学习
大数据·python·计算机·spark·毕业设计·课程设计·wta网球
言乐65 小时前
Python区分广度优先深度优先宽度优先的区别
python·算法·深度优先·广度优先·宽度优先
打工仔折腾 AI5 小时前
LLaMA 1 到 LLaMA 3 架构演进拆解:从 RoPE、GQA 到词表扩张
人工智能·后端·python·深度学习·langchain·llama
旋生万物6 小时前
螺旋角分布的功率谱分析:多窗谱 + FDR 校正
开发语言·python
专业程序开发源6 小时前
SSM校园拍摄交流服务平台36936-计算机课程设计、毕业设计
java·spring boot·后端·python·elasticsearch·php·课程设计
wuyk5556 小时前
Python 网络爬虫入门到实战 第 04 章:请求头、UA 伪装、超时、异常处理、基础反爬绕过
开发语言·爬虫·python
kaiyou20266 小时前
用户研究岗秋招,统计分析能力怎么学习和证明?
数据库·python·学习
weixin_440730507 小时前
装饰器decorator总结(函数即是变量、高阶函数、嵌套函数、参数组)
python·装饰器
零基础1237 小时前
LLM Agent 驱动的物模型构建:从设备手册到边缘接入的自动化实践
运维·人工智能·经验分享·python·自动化