多线程批量下载ERA5逐日数据

news2024/11/25 20:48:57

介绍

这篇博文主要是整了和ERA5官方参考文档和网上现有的代码,从而实现ERA5逐日数据的批量下载**(可指定时区)**。

先前准备

在使用python批量下载ERA5逐日数据前我们需要手动配置一下cdsapi
1.访问:CDS官网并注册账号
在这里插入图片描述2.注册好之后需要手动安装一下cdsapi库

pip install cdsapi

3.访问:https://cds.climate.copernicus.eu/api-how-to
将红框里面的文字复制一下
在这里插入图片描述
然后在C:\Users\Administrator目录下创建一个名为.cdsapirc的文件,并将刚刚复制的东西粘贴到这个文件中
特别注意:一定要注意扩展名问题,修改的时候连带扩展名一起修改掉!!!!

核心代码


def down_daily_era5(year,month,var,stat):
    print("正在下载" + year + "年" + month + "月" + var + "的" + stat + "数据")
    c = cdsapi.Client(timeout=300)
    result = c.service(
    "tool.toolbox.orchestrator.workflow",
    params={
            "realm": "user-apps",
            "project": "app-c3s-daily-era5-statistics", 
            "version": "master",
            "kwargs": {
                "dataset": "reanalysis-era5-single-levels", # 这个地方需要注意你所选的数据集,他一共支持三个数据集:singel-level,pressure-level,era5-land
                "product_type": "reanalysis",
                "variable": var,
                "statistic": stat,
                "year": year,
                "month": month,
                "time_zone": "UTC+08:0", # 这个地方是修改时区的,我这里直接改成中国时区的,如果还需要世界时那就是UTC+00:0
                "frequency": "1-hourly",
                "grid": "0.25/0.25", # 这个是修改分辨率的,看大家的需要修改
                "area":{"lat": [4, 54], "lon": [73, 135]} # 中国经纬度范围
				# 差不多需要修改的就上面这些,如果还有什么疑问,可以直接私戳我哦!
                },
    "workflow_name": "application"
    })

    file_name = "download_" + stat + "_" + var + "_" + year + "_" + month + ".nc"

    location=result[0]['location']
    res = requests.get(location, stream = True)
    print("Writing data to " + file_name)
    with open(file_name,'wb') as fh:
        for r in res.iter_content(chunk_size = 1024):
            fh.write(r)
    fh.close()

main函数


vars = ['10m_u_component_of_wind', '10m_v_component_of_wind'] # 指定需要下载的变量名称
stats = ["daily_mean"] # 指定需要下载的统计类型,貌似是有四个最大值,最小值,平均值,范围好像是!!!
years = np.arange(2015, 2016, 1) # 指定下载的年份,这句话的意思是下载2015年的数据,没有2016哦!!!!
years = years.astype(str)
months = np.arange(1, 13, 1) # 指定需要下载的月份1-12月
months = months.astype(str)
year_month_combinations = [(year,month,var,stat) for year in years for month in months for var in vars for stat in stats]
print(year_month_combinations[0])
with multiprocessing.Pool(processes=4) as pool: # 这下面的别动哦!ERA5最多就能四个线程,改高了会直接限制你的哦
    pool.starmap(down_daily_era5, year_month_combinations)

完整代码奉上

import cdsapi
import requests
import numpy as np
import multiprocessing

def down_daily_era5(year,month,var,stat):
    print("正在下载" + year + "年" + month + "月" + var + "的" + stat + "数据")
    c = cdsapi.Client(timeout=300)
    result = c.service(
    "tool.toolbox.orchestrator.workflow",
    params={
            "realm": "user-apps",
            "project": "app-c3s-daily-era5-statistics",
            "version": "master",
            "kwargs": {
                "dataset": "reanalysis-era5-single-levels",
                "product_type": "reanalysis",
                "variable": var,
                "statistic": stat,
                "year": year,
                "month": month,
                "time_zone": "UTC+08:0",
                "frequency": "1-hourly",
                "grid": "0.25/0.25",
                "area":{"lat": [4, 54], "lon": [73, 135]}

                },
    "workflow_name": "application"
    })

    file_name = "download_" + stat + "_" + var + "_" + year + "_" + month + ".nc"

    location=result[0]['location']
    res = requests.get(location, stream = True)
    print("Writing data to " + file_name)
    with open(file_name,'wb') as fh:
        for r in res.iter_content(chunk_size = 1024):
            fh.write(r)
    fh.close()

if __name__ == '__main__':
    
    vars = ['10m_u_component_of_wind', '10m_v_component_of_wind']
    stats = ["daily_mean"]
    years = np.arange(2015, 2016, 1)
    years = years.astype(str)
    months = np.arange(1, 13, 1)
    months = months.astype(str)
    year_month_combinations = [(year,month,var,stat) for year in years for month in months for var in vars for stat in stats]
    print(year_month_combinations[0])
    with multiprocessing.Pool(processes=4) as pool:
        pool.starmap(down_daily_era5, year_month_combinations)

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

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

相关文章

掌动智能:UI自动化测试工具的重要性和应用

在软件开发过程中,测试是至关重要的环节。而UI自动化测试工具则成为了测试团队提高效率、降低成本、保证软件质量的重要利器。本文将介绍UI自动化测试工具的概念和重要性,并探讨其在软件开发中的应用和好处。 一、UI自动化测试工具的概念 UI自动化测试工…

获奖作品展示 | 2023嵌入式大赛AidLux系列作品精彩纷呈

第六届(2023)全国大学生嵌入式芯片与系统设计竞赛应用赛道全国总决赛已于8月下旬圆满结束。 本届赛事中,AidLux是广和通5G智能物联网赛题的唯一软件支持,阿加犀为该赛题学生们提供了全程线上辅导、技术答疑,以及大赛专…

VR庆中秋丨奇幻月景邀您共赏!

中秋佳节, 如何来一场别开生面的云游月景体验? 3DVR技术开启中秋过节新姿势, 嫦娥奔月伴玉兔、 太白花间饮美酒、 吴刚月下伐桂树…… 立体化还原璀璨的传统中秋文化, 还有趣味猜灯谜活动, 丰富豪礼等你来拿&a…

Coovally模型探索:高效下载并使用Hugging Face Transformers预训练模型

Hugging Face Transformers 是一个用于自然语言处理(NLP)的开源库,提供了各种预训练模型。这些模型被广泛应用于各种任务,如文本分类、命名实体识别、问答、文本生成等。Transformers库易于使用,可方便地集成到现有的深…

归并(merge)排序

归并(merge)排序也是采用分而治之的思想,其采用二分法将待排列数组分成若干个子数组。然后将相邻的子数组进行归并成新的有序子数组,然后在新的子数组的基础上在进行归并成新的有序数组,直至归并成一个整体有序的数组。…

源码编译postgresql

没什么好研究的了,就试试编译Postgresql源码,按照网站查的资料一步步测试的,方便后期定制数据库时候用,也算是开源的大优势了,只要你愿意折腾,可以自己定制或改进一个数据库来满足特殊业务。后面研究一下他…

Python 练习100实例(1-20)

Python 练习实例1 题目:有四个数字:1、2、3、4,能组成多少个互不相同且无重复数字的三位数?各是多少? 程序分析:可填在百位、十位、个位的数字都是1、2、3、4。组成所有的排列后再去 掉不满足条件的排列。 …

The Reversal Curse: LLMs trained on “A is B“ fail to learn “B is A“

(not an original, only classified as one to avoid cramming reference links) paper: https://owainevans.github.io/reversal_curse.pdf blog with interactions with the authors: Paper: LLMs trained on “A is B” fail to learn “B is A” — LessWrong This is a…

#硬件电路设计VL817-Q7(B0)芯片拓展USB3.0一转四调试心得

供电电路 基于XL4005的电源供电电路 SS34肖特基二极管 ZMM5V1稳压二极管 SMAJ15A TVS (注意这个封装搞错5V会短接) Vout0.8*[1(R2R3)/R1] D14 SR05静电防护器件 一路稳压两路TVS 共模电感 : 型号: SDCW2012-2-900TF 品牌&#…

二十一,结合直射光和间接光绘制小球

走到这一步&#xff0c;可以说&#xff0c;将直接光和间接光都走完了&#xff0c;要把这些结合起来了。 与learn opengl中不同的是&#xff0c;预过滤环境贴图没有用Mipmap&#xff0c;而是把五个不同粗糙度的所有纹理都加进来。 osg::ref_ptr<osg::TextureCubeMap> pre…

C# 继承

C# 继承 继承的类型实现继承虚方法隐藏方法调用函数的基类版本抽象类和抽象函数密封类和密封方法派生类的构造函数修饰符访问修饰符其他修饰符 接口 继承的类型 实现继承 表示一个类型派生于一个基类型&#xff0c;拥有该基类型的所有成员字段和函数。在实现继承中&#xff0c…

【接口测试学习】白盒测试 接口测试 自动化测试

一、什么是白盒测试 白盒测试是一种测试策略&#xff0c;这种策略允许我们检查程序的内部结构&#xff0c;对程序的逻辑结构进行检查&#xff0c;从中获取测试数据。白盒测试的对象基本是源程序&#xff0c;所以它又称为结构测试或逻辑驱动测试&#xff0c;白盒测试方法一般分为…

无代码赋能数字化,云表搭桥铺路链接“数据孤岛”

什么是信息孤岛 企业数字化转型过程中&#xff0c;信息孤岛是一个突出的问题。这种情况发生的原因是&#xff0c;企业内部使用了多种应用软件&#xff0c;时间一长&#xff0c;员工在不同的系统中积累了大量的企业数据资产。然而&#xff0c;由于这些系统之间的数据无法互通&am…

Cruise 的界面和模型文件路径介绍

文章目录 打开 Cruise自带模型所在路径自带模型分类Cruise 中的模型路径解析打开用户手册建模界面介绍打开模型 打开 Cruise 最新的几个 Cruise 软件都是集成到一个平台上的&#xff0c;名为 AVL Advanced Simulation Desktop。 自带模型所在路径 User 选项卡下的模型&#x…

canvas手写签名组件

效果图&#x1f447; 代码不多直接粘在这里 <template><div class"border"><canvasref"canvas"width"800"height"500"class"border-success"tabindex"0"mousedown"onMouseDown"/>&…

云可观测性安全平台——掌动智能

云可观测性安全平台是一个跨架构、跨平台的可观测性方案&#xff0c;实现对云环境下的细粒度数据可视化&#xff0c;满足安全部门对云内部安全领域的多场景诉求&#xff0c;包括敏感数据动态监管、云网攻击回溯分析、攻击横移风险监控、云异常流量分析。本文将介绍掌动智能云可…

【RabbitMQ实战】01 3分钟在Linux上安装RabbitMQ

本节采用docker安装RabbitMQ。采用的是bitnami的镜像。Bitnami是一个提供各种流行应用的Docker镜像和软件包的公司。采用docker的方式3分钟就可以把我们想安装的程序运行起来&#xff0c;不得不说真的很方便啊&#xff0c;好了&#xff0c;开搞。使用前提&#xff1a;Linux虚拟…

验证NIO的非阻塞模型

我们知道传统BIO模型在等待客户端连接时是阻塞的&#xff0c;读取数据时如果没有数据&#xff0c;也是阻塞的&#xff0c;而NIO则可以配置成非阻塞&#xff0c;废话不多说&#xff0c;直接看代码&#xff1a; import java.net.InetSocketAddress; import java.nio.ByteBuffer;…

OWASP Top 10漏洞解析(2)- A2:Cryptographic Failures 加密机制失效

作者&#xff1a;gentle_zhou 原文链接&#xff1a;OWASP Top 10漏洞解析&#xff08;2&#xff09;- A2:Cryptographic Failures 加密机制失效-云社区-华为云 Web应用程序安全一直是一个重要的话题&#xff0c;它不但关系到网络用户的隐私&#xff0c;财产&#xff0c;而且关…

服务器补丁管理软件

随着漏洞的不断上升&#xff0c;服务器修补是增强企业网络安全的典型特征。作为业务关键型机器&#xff0c;计划服务器维护的停机时间无疑是一件麻烦事。但是&#xff0c;借助高效的服务器补丁管理软件&#xff08;如 Patch Manager Plus&#xff09;&#xff0c;管理员可以利用…