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

相关推荐
小陈的进阶之路3 小时前
Claude Code辅助测试:导入篇skills
python·自动化
whcyhhh4 小时前
头歌实践教学平台:大数据存储2023(六)
大数据·数据库·python
for_ever_love__5 小时前
python基础语法学习: 闭包
开发语言·python·学习·闭包
ly76895 小时前
Python 全面入门:从核心语法到工程实践
开发语言·python
Niuguangshuo7 小时前
DeepFilterNet 3:端侧实时全带降噪的开源标杆
python
第一程序员7 小时前
AI 辅助编程的 7 个误区:把模型当高级搜索引擎是对它的最大浪费
python·rust·github
Groundwork Explorer8 小时前
W5500 网卡编程初始化与使用指南
python·单片机
逸Y 仙X9 小时前
MCP(模型控制协议)完全指南:从核心概念到实战开发
python·大模型·llm·ai编程·mcp
WILLF9 小时前
前端视角:Python requests vs JS axios
前端·python
哒哒哒5285209 小时前
69. Python: 核心语法-面向对象基础-案例(教务系统)
python