日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

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

發布時間:2025/1/21 python 17 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python多线程下载ts_基于Python的ERA-5多线程下载(1) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

目錄

基于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)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。