前言
由于OSTIA数据单次下载有数据上限,当下载多时次数据时,若一次次重新选择时次十分不方便,因此选择利用python对数据批量下载。
数据的选择
首先打开OSTIA数据网站,选择自己所需要的数据产品。(OSTIA) 此处以Diurnal skin SST analyses数据为例。
数据产品信息选择
进入选定产品后可以看到产品的详细信息。 点击Data access后设置下载区域,变量,时次等信息。 选定结束后可以点击Download options可以看到提示下载数据上限1G. 点击view script,可以看到可以利用脚本下载数据说明 下面的命令行就是运行终端需要输入的命令,但是官方所给库有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']
for k, v in list(dictionary.items()):
if v == '<OUTPUT_DIRECTORY>':
dictionary[k] = '.'
if v == '<OUTPUT_FILENAME>':
dictionary[k] = output_filename
if v == '<USERNAME>':
dictionary[k] = usr
if v == '<PASSWORD>':
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 <OUTPUT_DIRECTORY> --out-name <OUTPUT_FILENAME> --user <USERNAME> --pwd <PASSWORD>'
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
motu_api.execute_request(MotuOptions(data_request_options_dict_automated))
date_start = date_end + timedelta(days=1)
此处USERNAME,PASSWORD为账号和密码,OUTPUT_FILENAME为输出路径很文件名称,script_template为上文终端字符串,可以看到字符串中包含了产品的一些基本信息。对于其他该机构下的产品,依葫芦画瓢依旧可以完成批量下载。
|