python批量下载OSTIA数据

标题

  • 前言
    • 数据的选择
    • 数据产品信息选择
    • python脚本介绍

前言

由于OSTIA数据单次下载有数据上限,当下载多时次数据时,若一次次重新选择时次十分不方便,因此选择利用python对数据批量下载。

数据的选择

首先打开OSTIA数据网站,选择自己所需要的数据产品。(OSTIA)
此处以Diurnal skin SST analyses数据为例。
python批量下载OSTIA数据_第1张图片

数据产品信息选择

进入选定产品后可以看到产品的详细信息。
python批量下载OSTIA数据_第2张图片
点击Data access后设置下载区域,变量,时次等信息。
python批量下载OSTIA数据_第3张图片
选定结束后可以点击Download options可以看到提示下载数据上限1G.
python批量下载OSTIA数据_第4张图片
点击view script,可以看到可以利用脚本下载数据说明
python批量下载OSTIA数据_第5张图片
下面的命令行就是运行终端需要输入的命令,但是官方所给库有bug出现,直接输入似乎会出错,于是在官方示例上优化得到可以使用的脚本。

python脚本介绍

首先安装官方所给下载库

pip install motuclient

导入相关库

import motuclient
from motu_utils import motu_api
from datetime import datetime
from datetime import timedelta
import os

定义解构函数,将字符串解构成字典

def motu_option_parser(script_template, usr, pwd, output_filename):
    dictionary = dict(
        [e.strip().partition(" ")[::2] for e in script_template.split('--')])
    dictionary['variable'] = [value for (var, value) in [e.strip().partition(" ")[::2] for e in script_template.split('--')] if var == 'variable']  # pylint: disable=line-too-long
    for k, v in list(dictionary.items()):
        if v == '':
            dictionary[k] = '.'
        if v == '':
            dictionary[k] = output_filename
        if v == '':
            dictionary[k] = usr
        if v == '':
            dictionary[k] = pwd
        if k in ['longitude-min', 'longitude-max', 'latitude-min', 
                 'latitude-max', 'depth-min', 'depth-max']:
            dictionary[k] = float(v)
        if k in ['date-min', 'date-max']:
            dictionary[k] = v[1:-1]
        dictionary[k.replace('-','_')] = dictionary.pop(k)
    dictionary.pop('python')
    dictionary['auth_mode'] = 'cas'
    return dictionary

定义类选项

class MotuOptions:
    def __init__(self, attrs: dict):
        super(MotuOptions, self).__setattr__("attrs", attrs)

    def __setattr__(self, k, v):
        self.attrs[k] = v

    def __getattr__(self, k):
        try:
            return self.attrs[k]
        except KeyError:
            return None

主函数部分

USERNAME = "######"
PASSWORD = "######"
script_template = 'python -m motuclient --motu https://nrt.cmems-du.eu/motu-web/Motu --service-id SST_GLO_SST_L4_NRT_OBSERVATIONS_010_001-TDS --product-id METOFFICE-GLO-SST-L4-NRT-OBS-SST-V2 --longitude-min -179.975 --longitude-max 179.975 --latitude-min 0 --latitude-max 70 --date-min "2007-01-01 12:00:00" --date-max "2022-07-18 12:00:00" --variable analysed_sst --out-dir  --out-name  --user  --pwd '

date_start = datetime(2007, 1, 1,)
for number in range(192):
    date_end = date_start + timedelta(days=30)
    OUTPUT_FILENAME = './OSTIA_data/' + date_start.strftime("%Y_%m_%d") + "_OSTIA_sst.nc"
    data_request_options_dict_automated = motu_option_parser(script_template, USERNAME, PASSWORD, OUTPUT_FILENAME)

    data_request_options_dict_automated["date_min"] = date_start

    data_request_options_dict_automated["date_max"] = date_end
    #date_min & date_max must change format
    motu_api.execute_request(MotuOptions(data_request_options_dict_automated))
    date_start = date_end + timedelta(days=1)
    #for loop to download multiple time

此处USERNAME,PASSWORD为账号和密码,OUTPUT_FILENAME为输出路径很文件名称,script_template为上文终端字符串,可以看到字符串中包含了产品的一些基本信息。对于其他该机构下的产品,依葫芦画瓢依旧可以完成批量下载。

你可能感兴趣的:(气象,python,数据分析,大数据)