批量下载CMIP6数据

本文介绍了如何批量下载 CMIP6 数据。

1. 注册并登录

在这里插入图片描述

  • 进入注册界面,填写相关资料(只用填写加粗的必填部分),完成注册;

在这里插入图片描述

  • 注册成功后登录帐号,会在右上角显示用户信息,并且可以使用 Data Chart 。

在这里插入图片描述

2. 选择数据

  • 第一步,在左侧设置相应的条件选择自己需要的数据;
  • 第二步,在 “Total Number of Result” 处可以看到搜索结果数;
  • 第三步,设置页面显示结果数大于搜索结果数(这样能一次性将结果添加进 Data Cart 中);
  • 第四步,点击 Add all displayed results to Data Cart ,将搜索结果添加进 Data Cart 中;
  • 第五步,My Data Cart 后面的括号中显示搜索到的结果数,说明添加成功。

在这里插入图片描述

3. 获取下载链接

  • 点击 My Data Cart ,进入数据车;

在这里插入图片描述

  • 勾选 Select All Datasets ,并点击 WGET Script 打开脚本下载界面,下载所有 WGET 脚本;

为了获得更好的性能,ESGF 分别为每个数据中心生成 WGET 脚本,不同数据中心的数据下载速度不同,数据中心的数据节点状态可查看网址:https://esgf-node.llnl.gov/status/(或者点击右上角的 Data Nodes Status 查看)。

在这里插入图片描述

  • 下载脚本时会出现如下状态,点击仍然发送即可下载;
    在这里插入图片描述

实际上可以用WGET根据脚本直接批量下载,但是还没成功实现,因此采用了一个略麻烦的方法。

  • 用 VS Code 或者记事本打开脚本,可以看到脚本中各文件的下载链接信息;
  • 将脚本中所有链接复制出来保存到一个文本文件中(例如:从数据源 esgf-node.llnl.gov 中获取的链接保存为 gov.txt );
  • 建议每个脚本中的链接单独复制保存,不要放在一起,这样有利于提高下载效率。

在这里插入图片描述

4. 清洗链接数据

  • 从脚本中复制出的链接信息中(例如 gov.txt ),第一列为文件名,第二列为下载链接,之后的几列为验证信息(详见上图);
  • 为了方便下载,需要清洗复制出来的信息(例如 gov.txt ),只提取下载链接并保存(例如 gov-url.txt )。
if __name__ == '__main__':
    fw = open("C:\\Users\\xxx\\Desktop\\gov-url.txt", 'w')  # 创建url保存文件
    with open("C:\\Users\\xxx\\Desktop\\gov.txt", 'r') as fr:  # 读取所有下载链接信息
        for line in fr.readlines():  # 按行读取
            line = line.strip('\n').split(' ')  # 去掉换行符并分割
            url = line[1].replace("'", '')  # 清洗并获取待下载地址
            fw.writelines(url + '\n')  # 将下载地址写入保存文件中
    fw.close()  # 关闭文件

在这里插入图片描述

5. 批量下载

通过Internet Download Manager(IDM)软件和迅雷批量下载数据。

(1)IDM 批量下载

  • IDM 的安装和配置详见博客批量下载ERA5数据(Python+IDM)
  • 复制清洗后的下载链接(例如 gov-url.txt );
  • 打开 IDM 软件,点击左上角 任务 ,点击 从剪贴板中添加批量下载

在这里插入图片描述

  • 在批量下载界面中会显示每个待下载文件信息;
  • 选择 所有文件保存至同一目录(即文件下载目录);
  • 点击 全部选择 ,勾选所有文件;
  • 点击 确定 ,在弹出的新窗口中点击 确定 即可将所有文件添加进队列中开始下载。

在这里插入图片描述

  • 修改同时下载文件个数:在主界面点击 队列 - 主要下载队列 ,选择 队列中的文件 ,修改同时下载文件个数后,点击 应用 完成修改。
    在这里插入图片描述

可能出现的特殊情况
点击 从剪贴板中添加批量下载 后,文件类型和文件大小可能会出现“Error”或者为空的情况(如下图),首先检查一下数据中心的数据节点状态( https://esgf-node.llnl.gov/status/ ),如果没问题,尝试将下载链接的 http 修改为 https ,若问题没解决,则放到迅雷中下载。

(2)迅雷批量下载

不直接用迅雷的原因:(1)下载速度不如 IDM 快;(2)氪金才能变强(建议充值一个会员)

  • 复制清洗后的下载链接(例如 gov-url.txt );
  • 打开迅雷,点击左上角 新建 ,迅雷会自动从剪贴板中读取下载链接,点击 确定

在这里插入图片描述

  • 设置文件保存路径,点击 确定 ,开始下载。
    在这里插入图片描述

6. 查漏与分组

下载过程中还需检查所有数据是否都完整下载,另外,下载完后还需对数据进行分组。下面提供两段代码分别用于查漏和数据分组。

(1)查漏

  • 基于从WGET脚本中复制出来的链接信息进行检查(例如 gov.txt ),依次遍历每个文件名,判断是否在已下载文件中出现,如果没出现则为遗漏的文件,将其下载链接统一保存在一个文本文件中。
import os

if __name__ == '__main__':
    fw = open("C:\\Users\\xxx\\Desktop\\remain.txt", 'w')  # 存放未下载的数据链接
    with open("C:\\Users\\xxx\\Desktop\\gov.txt", 'r') as fr:  # 读取所有下载链接信息
        for line in fr.readlines():  # 按行读取
            line = line.strip('\n').split(' ')  # 去掉换行符并分割
            filename = line[0].replace("'", '')  # 文件名
            url = line[1].replace("'", '')  # 下载地址
            if filename not in os.listdir("F:\\CMIP6"):  # 判断文件名是否在已下载文件中出现
                fw.writelines(url + '\n')  # 将下载地址写入保存文件中
    fw.close()  # 关闭文件

(2)分组

  • 基于文件名中的信息对数据进行分组,选择分组依据,判断文件是否是这一类型,若是则移动到对应的文件夹内。
import os
import shutil

'''
例如:tas_day_NorESM2-LM_ssp370_r1i1p1f1_gn_20150101-20201231.nc
按模式 NorESM2-LM 对数据分组
'''
if __name__ == '__main__':
    folderpath = "E:\\CMIP6"  # 数据存放路径
    for filename in os.listdir(filepath):  # 获取所有文件名并遍历
        groupname = filename.split('_')[2]  # 分组的组名
        newpath = folderpath + '\\' + groupname  # 新存放文件夹
        if not os.path.exists(newpath):  # 判断文件夹是否存在
            os.mkdir(newpath)  # 不存在则创建
        filepath = folderpath + '\\' + filename  # 文件详细路径
        shutil.move(filepath, newpath)  # 将文件移动到新文件夹中

7. 最后

  • 内容仅供大家学习参考,若有不足之处,敬请大家批评指正!
  • 32
    点赞
  • 106
    收藏
    觉得还不错? 一键收藏
  • 13
    评论
评论 13
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值