![181f9a785b4ee6142f2b9f09ef943577.png](https://i-blog.csdnimg.cn/blog_migrate/746e29c4b6a3fdd1bdae342e6b593cd7.jpeg)
师姐想下载亿些CMIP6数据,全球日数据太大了硬盘不够,而且只想要中国范围的月平均数据。她推给我一篇介绍在shell脚本中用wget+cdo实现类似需求的方式,而我并不懂shell和cdo,大概看了一下后觉得用Python应该可以做得更好一些。
在我理解中,shell脚本中用wget+cdo的实现方法为:循环使用wget下载原始数据到本地硬盘上,每下载完一条后通过cdo命令将数据处理成所需要的另存到硬盘,再将原始数据删除。这样做思路清晰,但有两个地方我认为可以改进:
- 多线程下载
- 原始数据直接在内存中就处理,省去硬盘写入、读取、删除的开销,硬盘上只保存最终所需要的数据
思路为:urllib
多线程下载,下载数据用io.BytesIO
保存在内存,xarray
读取下载数据并处理保存到硬盘。
from urllib.request import Request, urlopen
from io import BytesIO
from multiprocessing.dummy import Pool
from os.path import exists
import json
from datetime import datetime
import xarray
from get_u