Python海洋特征数据下载脚本无法保存.nc文件求助
排查NCSS数据下载脚本无输出问题
核心问题分析
URL路径构造错误
你的代码中url_1的路径不符合目标服务器的NCSS端点结构。原始数据集的NCSS基础路径应为https://tds.marine.rutgers.edu/thredds/ncss/grid/roms/doppio/,而非将roms/doppio置于ncss之前,错误路径会导致请求地址无效。database列表未正确取值
database是列表类型,直接通过format拼接时会将列表的字符串形式(如['DopAnV3R3-ini2007_da/his'])带入URL,造成地址格式错误。需取列表第一个元素database[0]进行拼接。异常被静默忽略
try-except块直接使用pass,即使下载失败(如URL无效、网络中断)也不会输出任何错误信息,导致无法定位问题根源。时间循环步长不明确
arange(StartT,EndT)若datenum返回浮点型日期数,需明确步长为1(代表1天),避免生成非整数日期值导致时间参数错误。
修正后的代码
#!/usr/bin/env python3 from pylib import * import urllib.request import os close("all") #-------------------------------------------------------------------- #input #-------------------------------------------------------------------- StartT, EndT = datenum(2021,6,1), datenum(2021,10,1) xm = [-100, 0] ym = [0, 80] sdir = '.' # 修正NCSS基础URL url_1 = 'https://tds.marine.rutgers.edu/thredds/ncss/grid/roms/doppio/' database = ['DopAnV3R3-ini2007_da/his',] if not os.path.exists(sdir): os.mkdir(sdir) # 明确步长为1,确保按天循环 for ti in arange(StartT, EndT, 1): # 取database列表的第一个元素 url = f"{url_1}{database[0]}?" # 添加变量 for var in ['zeta','salt','temp','u','v']: url += f'var={var}&' # 添加范围参数 for param, val in zip(['south','north','west','east'], [*ym, *xm]): url += f'{param}={val}&' # 按3小时间隔下载 for n in arange(0,24,3): date_str = num2date(ti).strftime('%Y_%m_%d') fname = f"{sdir}/hycom_{date_str}_{n:02}.nc" if os.path.exists(fname): print(f"文件已存在,跳过: {fname}") continue # 构造时间参数,URL编码冒号为%3A,format字符串中用%%转义为% time_str = num2date(ti).strftime('%Y-%m-%d') furl = f"{url}horizStride=1&time={time_str}T{n:02}%%3A00%%3A00Z&timeStride=1&vertCoord=&accept=netcdf4" try: print(f"正在下载: {fname}") urllib.request.urlretrieve(furl, fname) print(f"下载完成: {fname}") except Exception as e: # 打印异常信息,方便排查 print(f"下载失败 {fname}: {str(e)}") print('Done-----------')
额外建议
- 先手动构造单个URL在浏览器中测试,确认能正常下载文件后再集成到代码中。
- 若不确定
pylib中日期处理函数的正确性,可改用标准库datetime或numpy的日期工具函数。 - 可添加日志文件记录下载状态,便于后续排查批量下载中的问题。
内容的提问来源于stack exchange,提问作者swmtech
相关产品推荐
相关产品推荐

