You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何迭代URL中的日期字段批量下载目标目录下的文件?

批量下载日期迭代的VIIRS文件解决方案

我来帮你搞定这个批量下载的问题!你现在的痛点是要手动维护几百个URL,其实只要利用日期迭代就能轻松解决——核心思路就是生成连续的日期字符串,替换URL里的固定日期部分,然后循环执行下载操作。

下面是调整后的完整代码,直接就能用:

import urllib.request
from datetime import datetime, timedelta
import os

# 1. 设置你需要的日期范围
start_date = datetime(2018, 6, 7)  # 起始日期
end_date = datetime(2018, 8, 15)   # 结束日期,改成你实际需要的日期

# 2. 定义URL和保存路径的模板,把可变的日期部分用占位符{date_str}代替
base_url = "https://eogdata.mines.edu/wwwdata/viirs_products/vnf/v30/VNF_j01_d{date_str}_noaa_v30-ez.csv.gz"
save_path_template = "C:/users/user 1/Desktop/{date_str}.gz"

# 确保保存目录存在,避免路径不存在导致下载失败
os.makedirs(os.path.dirname(save_path_template), exist_ok=True)

# 3. 循环迭代每个日期,执行下载
current_date = start_date
while current_date <= end_date:
    # 把日期转换成URL需要的YYYYMMDD格式字符串
    date_str = current_date.strftime("%Y%m%d")
    
    # 生成当前日期的下载URL和保存路径
    target_url = base_url.format(date_str=date_str)
    save_path = save_path_template.format(date_str=date_str)
    
    try:
        # 执行下载操作
        urllib.request.urlretrieve(target_url, save_path)
        print(f✅ 成功下载文件:{date_str}.gz")
    except Exception as e:
        # 捕获异常,避免单个文件失败中断整个批量任务
        print(f❌ 下载{date_str}.gz失败:{str(e)}")
    
    # 日期加一天,进入下一次循环
    current_date += timedelta(days=1)

关键细节说明:

  • 日期迭代逻辑:用datetime模块生成连续日期,timedelta(days=1)实现日期递增,不用手动输入任何日期字符串
  • 模板复用:通过base_url和save_path_template的占位符,自动生成每个日期对应的URL和文件名,避免重复代码
  • 异常处理:加入try-except块,就算某一天的文件不存在或者网络波动,也不会影响其他日期的文件下载
  • 路径检查:用os.makedirs确保保存目录存在,防止因路径不存在导致的下载失败

你只需要修改start_date和end_date来覆盖你需要的500+天范围,运行代码就能自动批量下载所有文件啦!

内容的提问来源于stack exchange,提问作者Mikko

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.13 08:50:45