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

相关推荐
_老码1 小时前
AI-reader阅读助手开发过程
人工智能·python·ai
_Jimmy_1 小时前
python性能分析工具
python
小猴子爱上树2 小时前
Temu批量视频翻译Python实现方案
开发语言·python·音视频
X1A0RAN2 小时前
Python 并发请求性能优化实战
python·性能优化·并发编程
陈同学xxx2 小时前
Hermes Agent 接入飞书,在手机上随时聊天
linux·python·飞书
卷无止境2 小时前
Python 中基于 Qt 的 GUI 库授权方式全解析
后端·python
卷无止境3 小时前
Guardrails.ai:为大语言模型加一道"安全阀"
后端·python
汤姆小白7 小时前
01-环境搭建与项目导览
人工智能·python·机器学习·numpy
向日的葵00613 小时前
langchain的Tools教程(三)
python·langchain·tools