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