Python脚本批量下载CDS气象数据

news2024/9/22 4:16:57

使用Python脚本从 Copernicus Climate Data Store (CDS) 检索气象数据

具体地,需要检索变量(geopotential、relative_humidity、temperature、u_component_of_wind、v_component_of_wind、vertical_velocity)在各种不同的压力水平、不同的日期和时间、以及在特定地理区域内的值。

使用了 CDS API 客户端来执行检索,保存结果到 NetCDF 格式的文件中,文件名是由年、月、日和时间组成的。

首先进入该网站

ERA5 hourly data on pressure levels from 1959 to present (copernicus.eu)

1.勾选想要下载的数据范围和变量

生成api

但是不能直接复制,这个使用邮件网页的任意位置,点击 “检查”

点击红色框圈选的按钮,之后将鼠标移动到代码部分,单击左键

右侧界面就会自动跳转到这段代码对应的网页脚本,点击<pre前面的箭头,将这段脚本展开

右键后,选择编辑文本编辑为HTML,就可以复制代码了

代码如下,最后所有数据都会下载到一个名为download.nc的文件中

import cdsapi

c = cdsapi.Client()

c.retrieve(
    'reanalysis-era5-pressure-levels',
    {
        'product_type': 'reanalysis',
        'format': 'netcdf',
        'variable': [
            'geopotential', 'relative_humidity', 'temperature',
            'u_component_of_wind', 'v_component_of_wind', 'vertical_velocity',
        ],
        'pressure_level': [
            '450', '500', '550',
            '600', '650', '700',
            '750', '775', '800',
            '825', '850', '875',
            '900', '925', '950',
            '975', '1000',
        ],
        'month': [
            '01', '02', '03',
            '04', '05', '06',
            '07', '08', '09',
            '10', '11', '12',
        ],
        'day': [
            '01', '02', '03',
            '04', '05', '06',
            '07', '08', '09',
            '10', '11', '12',
            '13', '14', '15',
            '16', '17', '18',
            '19', '20', '21',
            '22', '23', '24',
            '25', '26', '27',
            '28', '29', '30',
            '31',
        ],
        'time': [
            '00:00', '01:00', '02:00',
            '03:00', '04:00', '05:00',
            '06:00', '07:00', '08:00',
            '09:00', '10:00', '11:00',
            '12:00', '13:00', '14:00',
            '15:00', '16:00', '17:00',
            '18:00', '19:00', '20:00',
            '21:00', '22:00', '23:00',
        ],
        'area': [
            35.5, 116, 30,
            122,
        ],
        'year': [
            '2017', '2018', '2019',
            '2020', '2021', '2022',
        ],
    },
    'download.nc')

当数据量较大的时候,该文件难以读取,导致无法进一步对数据进行分析。这个时候就需要将大数据进行细分处理,我采取的办法是通过循环的方法按小时读取数据。

一年有365天,一天有24小时,一共5年的数据,也就是说有5*365*24=43800个文件,我通过年月时日的格式对这些文件命名,如2017010421.nc文件表示的是2017年1月4日21时的数据。

同时,因为下载的时候容易受网络影响中断下载,万一下载了20000个文件的时候中途断开了,重新运行代码又要重复下载,因此我引入os库判断目标文件是否已经存在,存在则跳过。

最后,2月没有30天,每个月的天数不完全相同,默认31天会导致CDS服务器报错。引入calendar库,判断当前年,当前月份有几天。最后生成字符串列表,不足两位的需要在前面补零。

import cdsapi
import os
import calendar

variables = [
    'geopotential', 'relative_humidity', 'temperature',
    'u_component_of_wind', 'v_component_of_wind', 'vertical_velocity'
]

pressure_levels = [
    '400', '450', '500',
    '550', '600', '650',
    '700', '750', '775',
    '800', '825', '850',
    '875', '900', '925',
    '950', '975', '1000'
]

years = [
    '2017', '2018', '2019',
    '2020', '2021', '2022'
]

months = [
    '01', '02', '03',
    '04', '05', '06',
    '07', '08', '09',
    '10', '11', '12'
]

days = [
    '01', '02', '03',
    '04', '05', '06',
    '07', '08', '09',
    '10', '11', '12',
    '13', '14', '15',
    '16', '17', '18',
    '19', '20', '21',
    '22', '23', '24',
    '25', '26', '27',
    '28', '29', '30',
    '31'
]

times = [
    '00:00', '01:00', '02:00',
    '03:00', '04:00', '05:00',
    '06:00', '07:00', '08:00',
    '09:00', '10:00', '11:00',
    '12:00', '13:00', '14:00',
    '15:00', '16:00', '17:00',
    '18:00', '19:00', '20:00',
    '21:00', '22:00', '23:00'
]

area = [35.5, 116, 30, 122]

c = cdsapi.Client()
for year in years:
    for month in months:
        num_days = calendar.monthrange(int(year), int(month))[1]
        days = [str(i).zfill(2) for i in range(1, num_days+1)]
        for day in days:
            for time in times:
                saveas = year + month + day + time[:2] + '.nc'
                if os.path.isfile(saveas):
                    # print(f"{saveas} 已存在,跳过下载")
                    continue
                request = {
                    'product_type': 'reanalysis',
                    'format': 'netcdf',
                    'variable': variables,
                    'pressure_level': pressure_levels,
                    'year': year,
                    'month': month,
                    'day': day,
                    'time': time,
                    'area': area,
                }
                c.retrieve('reanalysis-era5-pressure-levels', request, saveas)

os库和calendar库都是python自带的,而cdsapi库需要自行安装,进入命令行,输入

pip install cdsapi -i https://pypi.tuna.tsinghua.edu.cn/simple/

写在最后,如果运行代码出现如下报错信息,是因为没有在用户目录下配置cds的api调用许可文件,具体解决办法参考下面这篇博客即可。

Exception: Missing/incomplete configuration file: C:\Users\Administrator/.cdsapirc

Python使用CDS API时,报Exception: Missing/incomplete configuration错误_没有文件叫cdsapi_bug嘛我经常写的博客-CSDN博客

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/359464.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

罗克韦尔AB PLC_FactoryTalk无法登录的解决方法

罗克韦尔AB PLC_FactoryTalk无法登录的解决方法 情况说明: 在打开Studio 5000软件时,出现一个弹窗Log On to FactoryTalk - Network,正常情况下输入Windows账户和密码就可以登录成功。 但是却出现了下图所示窗口,其中‘abseme’是Windows账户名,‘WELL’是计算机名称,下图…

SQL零基础入门学习(二)

SQL SELECT 语句 SELECT 语句用于从数据库中选取数据。 结果被存储在一个结果表中&#xff0c;称为结果集。 SQL SELECT 语法 SELECT column1, column2, ... FROM table_name;与 SELECT * FROM table_name;参数说明&#xff1a; column1, column2, …&#xff1a;要选择的…

向上跳空缺口选股公式,选出回补后再启动的标的

一、向上跳空缺口选股公式 思路&#xff1a;先找出缺口&#xff0c;缺口前后有两根K线&#xff0c;缺口低价是前一根K线的最高价&#xff0c;缺口高价是后一根K线的最低价。&#xff08;如上图&#xff09;收盘价低于缺口低价&#xff0c;即实现缺口回补。回补缺口之后&#xf…

“一把梭ViT”来了,谷歌提出可以灵活应对各种图像块尺寸的FlexiViT

原文链接&#xff1a;https://www.techbeat.net/article-info?id4486 作者&#xff1a;seven_ 论文链接&#xff1a; https://arxiv.org/abs/2212.08013 代码链接&#xff1a; https://github.com/google-research/big_vision 视觉Transformer&#xff08;ViT&#xff09;目前…

Linux - 第4节 - Linux进程控制

1.进程创建 1.1.fork函数 在linux中fork函数是非常重要的函数&#xff0c;它从已存在进程中创建一个新进程。新进程为子进程&#xff0c;而原进程为父进程。#include <unistd.h> pid_t fork(void); 返回值&#xff1a;子进程中返回0&#xff0c;父进程返回子进程id&…

考虑泄流效应的光伏并网点电压系统侧增援调控方法matlab

目录 1主要内容 1.1 泄流效应​编辑 1.2 候选无功补偿站优选方法 1.3 算法步骤 2部分代码 3程序结果 4程序链接 1主要内容 程序主要复现《考虑泄流效应的风电场并网点电压系统侧增援调控方法_于其宜》&#xff0c;将光伏取代风电&#xff0c;考虑某时刻光伏并网的电压增…

3年工作之后是不是还在“点点点”,3年感悟和你分享....

经常都有人问我软件测试前景怎么样&#xff0c;每年也都帮助很多朋友做职业分析和学习规划&#xff0c;也很欣慰能够通过自己的努力帮到一些人进入到大厂。 2023年软件测试行业的发展现状以及未来的前景趋势 最近很多测试人在找工作的时候&#xff0c;明显的会发现功能测试很…

死磕JAVA10余年!手写“Java核心技能精选”Github一夜疯涨30w+

写在前面 想在面试、工作中脱颖而出&#xff1f;想在最短的时间内快速掌握 Java 的核心基础知识点&#xff1f;想要成为一位优秀的 Java 工程师&#xff1f;本篇文章能助你一臂之力&#xff01; 很多同学对一些新技术名词都能侃侃而谈&#xff0c;但对一些核心原理理解的不够…

很好用的 UI 调试技巧

文章目录 UI调试效果(一)评论最后UI调试小姑(二)参考文档 很好用的 UI 调试技巧 UI调试效果(一) javascript: (function() {const style = document<

RT-Thread初识学习-02

课程链接 02-RT-Thread介绍_哔哩哔哩_bilibili 学习方法 使用官方资料进行学习&#xff0c;并且在学习的过程中与FreeRTOS进行比较 RT-Thread API参考手册: 基础定义 标准版RTT移植 这里的串口2是由于打印信息的&#xff0c;因此你需要在开发板上选择USB-TTL串口&#xff0…

什么是品牌控价?品牌控价的意义是什么?品牌控价合不合法

很多人不明白为什么要控价&#xff0c;今天我们就来聊一聊品牌控价。 一、 什么是控价 顾名思义&#xff0c;“控价”就是管控价格&#xff0c;将价格控制在合理的范围以内。 品牌方生产出产品&#xff0c;要以一定的价格投入市场。而市场中的实际成交价格会受渠道各因素的影…

Kubernetes二 Kubernetes之实战以及pod详解

Kubernetes入门 一 Kubernetes实战 本章节将介绍如何在kubernetes集群中部署一个nginx服务&#xff0c;并且能够对其进行访问。 1.1 Namespace Namespace是kubernetes系统中的一种非常重要资源&#xff0c;它的主要作用是用来实现多套环境的资源隔离或者多租户的资源隔离。…

pmp考试是什么?适合哪些人学?含金量?(含pmp资料)

先说一下我这个人的理解&#xff0c;PMP就是提高项目管理理论基础和实践能力的考试。 再说说PMP官方一点的说明&#xff1a; PMP证书全称为Project Management Professional&#xff0c;也叫项目管理专业人士资格认证。PMP证书由美国项目管理协会(PMI)发起&#xff0c;是严格…

覃小龙34岁生日记:结合趋势,发挥优势,方能百战不殆

覃小龙34岁生日记:结合趋势&#xff0c;发挥优势&#xff0c;方能百战不殆&#xff01;2023-2-20星期一 覃小龙2023年2月17日&#xff0c;是我34岁生日&#xff0c;1989年出生的我&#xff0c;一晃眼&#xff0c;已经走过第34个年头了&#xff01;从2016年创业到今天&#xff0…

RK3568存储性能测试

USBU盘储存性能参数(USB3.0接口)参数测试条件最小典型最大单位说明写速度写入1GB数据—32.6—MB/sU盘型号&#xff1a;KODAK&#xff0c;32GB USB3.0读速度读取1GB数据—66.7—MB/s 备注HW356X-CORE-4GB-32GBHW356X-GKA&#xff0c;操作系统&#xff1a;LinuxU盘储存性能参数(U…

linux 系统编程之线程

线程 文章目录线程1 线程概念2 NPT安装线程 man page&#xff1a;查看指定线程的 LWP 号&#xff1a;3 线程的特点4 线程共享资源5 线程非共享资源6 线程的优缺点7线程常用操作1 线程号pthread_self函数&#xff1a;pthread_equal函数:参考代码2 错误返回值分析参考代码3 线程的…

搞懂Druid之连接创建和销毁

前言 Druid是阿里开源的数据库连接池&#xff0c;是阿里监控系统Dragoon的副产品&#xff0c;提供了强大的可监控性和基于Filter-Chain的可扩展性。 本篇文章将对Druid数据库连接池的连接创建和销毁进行分析。分析Druid数据库连接池的源码前&#xff0c;需要明确几个概念。 …

【大数据离线开发】7.2 搭建HBase环境

7.2 搭建HBase的环境 准备工作&#xff1a; 解压Hbase安装包 [rootbigdata111 tools]# tar -zxvf hbase-1.3.1-bin.tar.gz -C ~/training/设置Hadoop的环境变量 vi ~/.bash_profile HBASE_HOME/root/training/hbase-1.3.1 export HBASE_HOMEPATH$HBASE_HOME/bin:$PATH export…

37、基于51单片机乒乓球比赛系统设计

摘要 乒乓球游戏电路是一个对输入信号、输入时机正确与否的8个LED表示乒乓球球台和乒乓球&#xff0c;用数码管模拟显示器&#xff0c;显示比赛局数比分和每局玩家得分的电路。电路并不复杂&#xff0c;整体分为两个模块&#xff1a;一&#xff0c;游戏主模块&#xff1b;二&a…

excel图表技巧:如何制作自动刷新的动态喜报

临近年关&#xff0c;各企业进入节日营销大战&#xff0c;每天都需要对销售数据进行统计分析&#xff0c;同时为了鼓励及带动新品的销售气氛&#xff0c;还会制作鼓励销售人员士气的喜报。今天就来分享使用Excel如何快速制作可以自动更新数据的喜报&#xff0c;非常方便哦&…