目录

基于Python的ERA-5多线程下载分为两部分,《基于Python的ERA-5多线程下载 (1)》,直接再本地使用,即写代码的人使用;《基于Python的ERA-5多线程下载 (2)》使用 pyinsaller 将写好的程序,打包成 .exe 文件,以便其他人使用。

动机

恩师推荐,我的论文可以用到相关数据,然后就对相关数据下载方式调研,在这里做笔记!!!!

后面贴的代码,我也同时上传到了到了我的 资源 中,.py文件,下载就可以用,只需关注就能下载(下载之后取消关注也无所谓)。

提示:以下是本篇文章正文内容,案例可供参考

一、正文

基于Python的ERA-5多线程下载分为两部分,《基于Python的ERA-5多线程下载 (1)》,直接再本地使用,即写代码的人使用;《基于Python的ERA-5多线程下载 (2)》将会将写好的程序,打包成 .exe 文件,以便其他人使用。

1.注册账号

登录 cds.climate.copernicus.eu 网站注册账号。

2.登录账号,复制 url: 与 key:

登录账号后,访问 api-how-to 网页,复制 url: 与 key: 。

注意:如果显示 url:{} 、key: {} 为空,刷新界面;刷新后如果依然是空,网页右上角查看自己的账号是否是登录状态。

3.创建.cdsapirc本地文件

在本地,进入 C:\Users\Administrator 目录,右键创建空白.txt文件,将名字修改为为".cdsapirc",将第2.步网页复制的 url: {########}与 key:{#######}粘贴到.cdsapirc文件中,保存。

注意:

在创建文.txt文件,修改文件名,需要确保”文件扩展名“是打开的,否则你创建的.cdsapirc文件的实际名字为".cdsapirc.txt",因为文件扩展名未打开,你看到的是".cdsapirc"。

此外,根据我的经验,感觉.cdsapirc相当于一个Cookies的文件,让服务器认为你一直处于登录状态,可能不对,但是你可以这么理解。

4.安装python环境

庆幸的是,ECMWF提供的cdsapi包,在python2.x与python3.x均可运行,所以大家就无需纠结python版本。我这里用的是python3.7(Anaconda-2019.10),大家自行安装python(Anaconda)版本就可,我的其他几篇博文中都有提到。

5.安装cdsapi包

开始菜单—Anaconda3 (64-bit)—Anaconda Prompt (Anaconda3),执行以下代码:

如果将自己的python或者Anaconda已经加入环境变量后,直接通过"命令提示符"即 cmd,输入以下代码就可安装。

pip install cdsapi

6.复制脚本内容至本地

在本地创建空白文本(.txt)文件,复制python脚本内容(后面贴出)粘贴至空白文本,将 .txt 后缀改为 .py 后缀。

7.运行脚本,批量下载

开始菜单—Anaconda3 (64-bit)—Anaconda Prompt (Anaconda3),cd 到.py文件所在目录(如果不在c盘,需要再输入一次盘符,才能进入到目标目录中,如图)

8.修改参量,下载自己产品

大家可以根据自己的需求,调整自己的参数,主要调整参数有:

outDir、‘format’、‘variable’、begin、end

注:

变量名称,大家可以去产品页面,选择自己需要的产品,然后点击 ”show api request“ ,在代码中,将变量名称复制下来,替换自己的代码中 ‘variable’ 。如图:

二、脚本

废话不多说:贴上我的脚本

#!/usr/bin/python

# -*- coding: utf-8 -*-

"""

@version: Anaconda

@author: LeYongkang

@contact: 1363989042@qq.com

@software: PyCharm

@file: ERA5_Download_Edit

@time: 2021/1/20 0020 下午 9:23

"""

from queue import Queue

from threading import Thread

import cdsapi

from time import time

import datetime

import os

def downloadonefile(data):

ts = time()

outDir = r"E:\python\python3_64b\ERA-5\mslp"

try:

os.makedirs(outDir)

except:

pass

filename=os.path.join(outDir,"era5.mslp."+data+".grib")

if(os.path.isfile(filename)): #如果存在文件名则返回

print("ok",filename)

else:

print(filename)

c = cdsapi.Client()

c.retrieve(

'reanalysis-era5-land',

{

'product_type' : 'reanalysis',

'format' : 'grib', # Supported format: grib and netcdf. Default: grib

# 需要下载的变量产品名称

'variable': ['skin_temperature', 'surface_thermal_radiation_downwards',],

# 其它变量名参见 https://cds.climate.copernicus.eu/cdsapp#!/dataset/reanalysis-era5-single-levels

'year' : data[0:4],

'month' : data[-4:-2],

'day' : data[-2:],

'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' : [60, -10, 50, 2], # North, West, South, East. Default: global

# 'grid' : [1.0, 1.0], # Latitude/longitude grid: east-west (longitude) and north-south resolution (latitude). Default: 0.25 x 0.25

},

filename)

# 下载脚本

class DownloadWorker(Thread):

def __init__(self, queue):

Thread.__init__(self)

self.queue = queue

def run(self):

while True:

# 从队列中获取任务并扩展tuple

data = self.queue.get()

downloadonefile(data)

self.queue.task_done()

if __name__ == '__main__':

# 定义程序起始时间,下载结束后,根据结束时间计算共花费多长时间

ts = time()

# 定义下载数据的 起始日期

begin = datetime.date(2015,1,1)

# 定义下载数据的 结束日期

end = datetime.date(2018,12,31)

d = begin

delta = datetime.timedelta(days=1)

#建立下载日期序列

links = []

while d <= end:

data=d.strftime("%Y%m%d")

links.append(str(data))

d += delta

# 创建一个主进程与工作进程通信

queue = Queue()

# 注意,每个用户同时最多接受4个

# 参考:request https://cds.climate.copernicus.eu/vision

# 创建四个工作线程

for x in range(4):

worker = DownloadWorker(queue)

#将daemon设置为True将会使主线程退出,即使所有worker都阻塞了

worker.daemon = True

worker.start()

# 将任务以tuple的形式放入队列中

for link in links:

queue.put((link))

# 让主线程等待队列完成所有的任务

queue.join()

print('Took Time:{}'.format(time() - ts))

三、引用

虽然代码不多,但是以我的能力不可能独立完成,90%参考,然后根据我的代码习惯(比如说不经常使用main(文件))稍微修改了一下下:

https://mp.weixin.qq.com/s/lOQ_6s8grFSY3TU6XcnO8w

https://github.com/jiangleads/Get_ECMWF_Data

感谢几位博主的贡献!!!

四、结语

我也只是个渣渣,是代码搬运工;这个博文我感觉写的很细,把我最初接触代码的遇到的问题全部都贴上了,希望仔细每一个按照我流程走下来的人,都能得到正确的结果。

最后,其实我参考的博文、GitHub都是我老师给我发过来的,我只是整理了下,走通而已,这么好的老师哪里找。

python多线程下载ts_基于Python的ERA-5多线程下载(1)相关推荐

  1. Python语言学习:基于python五种方法实现使用某函数名【func_01】的字符串格式('func_01')来调用该函数【func_01】执行功能

    Python语言学习:基于python五种方法实现使用某函数名[func_01]的字符串格式('func_01')来调用该函数[func_01]执行功能 目录 问题提出 代码五种设计思路 T1方法:e ...

  2. Python之GUI:基于Python的GUI界面设计的一套AI课程学习(机器学习、深度学习、大数据、云计算等)推荐系统(包括语音生成、识别等前沿黑科技)

    Python之GUI:基于Python的GUI界面设计的一套AI课程学习(机器学习.深度学习.大数据.云计算等)推荐系统(包括语音生成.识别等前沿黑科技) 导读 基于Python的GUI界面设计的一套 ...

  3. Python人脸识别教程 - 基于Python的开源人脸识别库:离线识别率高达99.38%

    Python人脸识别教程 - 基于Python的开源人脸识别库:离线识别率高达99.38% 仅用 Python 和命令行就可以实现人脸识别的库开源了.该库使用 dlib 顶尖的深度学习人脸识别技术构建 ...

  4. Python数据分析初探项目 基于Python数据可视化的网易云音乐歌单分析系统 大学编程作业(TUST 天津科技大学 2022年)

    Python 数据分析初探项目 基于 Python 数据可视化的网易云音乐歌单分析系统 大学编程作业(TUST 天津科技大学 2022 年) Python 数据分析初探项目 基于 Python 数据可 ...

  5. python制作物联网控制软件下载_基于Python和Django框架的物联网智能设备管理系统的设计与实现...

    论文写作指导:请加QQ229366758 基于Python和Django框架的物联网智能设备管理系统的设计与实现 作者:未知 摘 要:针对目前日益增多的智能设备提出了兼容性好,稳定性高,易于管理的管理 ...

  6. python中pygame模块下载_基于python中pygame模块的Linux下安装过程(详解)

    pyhthon中pygame模块怎么安装?pyhthon中pygame模块怎么安装?鄙人为初二一名学生,闲来无事 钻研起电这句话还是建议问一下你们代课老师吧,因为你们老师是这方面专家,诺儿那边的话肯定 ...

  7. 基于python爬虫数据处理_基于Python爬虫的校园数据获取

    苏艺航 徐海蛟 何佳蕾 杨振宇 王佳鹏 摘要:随着移动时代的到来,只适配了电脑网页.性能羸弱的校园教务系统,已经不能满足学生们的移动查询需求.为此,设计了一种基于网络爬虫的高实用性查询系統.它首先通过 ...

  8. python网络爬虫技术-基于Python的网络爬虫技术综述

    汪洋 姜新通 [摘 要]人类社会已经进入大数据时代,这正在改变着我们的工作和生活.随着互联网的兴起和发展,同时也产生了各种对人类有价值的数据.快速搜索数据和充分利用数据信息已成为一个巨大挑战.这样的需 ...

  9. python软件管理系统_conda:基于python的软件管理系统

    python语言在发展的过程中,经历了python2到python3的迁移,对应的包也出现了多个版本.如何在一台服务器上同时安装不同版本的python,不同版本的package, 而且不互相干扰,是一 ...

最新文章

  1. 实战:OpenVINO+OpenCV 文本检测与识别
  2. 怎么可以查到AD里面长时间没有登录的帐号
  3. IDEA中快捷键修改成和eclipse一样
  4. python中关于list列表的增删查改操作
  5. 使用ganymed-ssh2-build通过ssh获得远程服务器参数
  6. UA MATH571A 一元线性回归II 统计推断1
  7. 读取文件:TypeError: an integer is required (got type str)
  8. 【数据结构与算法】之深入解析“自由之路”的求解思路与算法示例
  9. redhat es4 u5 下安装ORACLE 11G.
  10. 纪中培训总结(2019年9月4~13日)
  11. 一建机电实务教材电子版_20年一建其实并不难,官方出版:复习题集(精修),速做速提90分...
  12. python升级到最新版本windows64位安装哪个包_手把手windows64位配置安装python2.7
  13. LeetCode-Maximal Rectangle-最大矩形
  14. 生活中的数学 —— 操场几何学
  15. java连接池hkai,MySQL连接配置文件密码加密及其在多种连接池上的应用
  16. HDU 1213 How Many Tables 并查集 水~
  17. python实现键盘自动输入
  18. 状态码 https dns解析过程
  19. 最新计算机台式机小机箱,几款热门台式机主机机箱的参数配置【图文】
  20. html lang=zh-CN 中文标准写法与HTML标准定义

热门文章

  1. AI入门:不用任何公式把推荐系统讲清楚
  2. 100万+奖金池!目标检测、车牌识别、人体分割等赛事全面启动! ECV-2021 来了
  3. 网易云信助力长沙银行打造远程视频银行 | 字母点评数字化先锋案例
  4. 互联网1分钟 | 0121 Vlog陌生人社交APP「自言」为年轻人打造生活视频分享平台;周鸿祎:智能设备要警惕“海豚音攻击”...
  5. 风靡硅谷营销界的 MarTech 魔术
  6. Wireshark对HTTPS数据的解密
  7. 数据挖掘具体技术——分类
  8. ecshop百度编辑器远程下载无后缀的图片,并且加水印
  9. Crontab使用详解
  10. Avaya以1亿美元向Extreme销售网络业务