如何迭代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
相关产品推荐
相关产品推荐

