乐于分享
好东西不私藏

Python自动下载HYCOM 3小时数据

Python自动下载HYCOM 3小时数据

一、环境配置

pip install oafuncs# 版本要求: >= 0.0.99# Python版本:3.10 ~ 3.13

二、核心功能

2.1 数据时间范围

如果你不确定数据的时间覆盖范围,可以使用这个函数生成一张时间范围图,方便查看。

import oafuncsoafuncs.oa_down.hycom_3hourly.draw_time_range()

运行后,会在当前文件夹下生成一张图片,展示所有可用的3小时分辨率数据的时间段。

小提示:

  • 最新数据会有几天延迟(约8天),属于正常情况,暂时设置为2030年。

  • 时间分辨率固定为3小时(00, 03, 06, ... , 21)。

2.2 下载功能

from oafuncs.oa_down.hycom_3hourly import downloadif __name__ == "__main__":    download_dict = {        "water_u": {"simple_name""u""download"1},        "water_v": {"simple_name""v""download"1},        "surf_el": {"simple_name""ssh""download"1},        "water_temp": {"simple_name""temp""download"0},        "salinity": {"simple_name""salt""download"0},        "water_u_bottom": {"simple_name""u_b""download"0},        "water_v_bottom": {"simple_name""v_b""download"0},        "water_temp_bottom": {"simple_name""temp_b""download"0},        "salinity_bottom": {"simple_name""salt_b""download"0},    }    var_list = [var_name for var_name in download_dict.keys() if download_dict[var_name]["download"]]    single_var = False    options = {        "variables": var_list,        "start_time""2018010100",        # "end_time": "2019010100",        "end_time""2020080921",        "output_dir"r"I:\Data\HYCOM\test",        "lon_min"72,        "lon_max"160,        "lat_min": -7.5,        "lat_max"55,        "workers"2,        "overwrite"False,        "depth"None,        "level"None,        "validate_time"None,        # "validate_time": True,        # "idm_path": r"D:\Programs\Internet Download Manager\IDMan.exe",        "interval_hours"3,    }    if single_var:        for var_name in var_list:            options["variables"] = var_name            download(**options)    else:        download(**options)

参数说明(以最新函数说明为主):

深度可选:

level_depth = [0.02.04.06.08.010.012.015.020.025.030.035.040.045.050.060.070.080.090.0100.0125.0150.0200.0250.0300.0350.0400.0500.0600.0700.0800.0900.01000.01250.01500.02000.02500.03000.04000.05000]

2.3 合并文件

如果你需要将多个时间点的文件合并成一个,可以使用merge函数。

# 简单示例file_list = []for time_str in time_list:    file_list.append(root_path + rf'/HYCOM_{var_name}_{time_str}.nc')# orimport oafuncsfile_list = oafuncs.oa_file.find_file(root_pat,f'HYCOM_{var_name}*nc')# --------------------------------------------------------------------------------------oafuncs.oa_nc.merge(file_list, var_name, 'time', root_path + rf'/HYCOM_{var_name}_{merge_name}.nc')

三、下载效果

运行时会显示下载进度,偶尔出现超时等提示是正常的,最终能成功下载即可。

四、常见问题

1. 下载失败或超时?

   可以多运行几次代码,工具会自动补缺。

   检查网络,或降低并行数。

2. 某些时刻数据不存在?

   可能是官网确实没有该时次数据,建议去官网核实。

3. IP被封怎么办?

   如果并行下载过于频繁或并行数开太大,可能会被封IP,通常一天后会解封。建议串行下载,降低频率。

最后提醒:请以最新版库为准,文中示例代码可能会有微调。