乐于分享
好东西不私藏

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.0, 2.0, 4.0, 6.0, 8.0, 10.0, 12.0, 15.0, 20.0, 25.0, 30.0, 35.0, 40.0, 45.0, 50.0, 60.0, 70.0, 80.0, 90.0, 100.0, 125.0, 150.0, 200.0, 250.0, 300.0, 350.0, 400.0, 500.0, 600.0, 700.0, 800.0, 900.0, 1000.0, 1250.0, 1500.0, 2000.0, 2500.0, 3000.0, 4000.0, 5000]

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,通常一天后会解封。建议串行下载,降低频率。

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

相关学习资料