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

循环下载CSV文件时仅获取列表最后一个URL内容的问题求助

解决你的循环与文件保存问题

嘿,我来帮你捋捋这个问题~你的脚本现在只保留了最后一个URL的内容,主要是循环逻辑和文件操作的几个小问题导致的,咱们一步步修正:

先说说你的代码里的核心问题

  • 多余的嵌套循环:你嵌套了jobboard_names和files_names的循环,但其实jobboard_name被你重新赋值成了请求响应,这个循环完全没必要——它会让同一个URL被重复请求多次,最后每次都覆盖文件内容,自然只剩最后一次的结果。
  • 文件覆盖风险:如果files_names里是重复的文件名,或者你没给每个URL分配唯一的文件,后面的写入会直接覆盖前面的内容。
  • 变量名混乱:把循环变量jobboard_name用来存请求响应,容易搞混逻辑,换个清晰的名字比如response会好很多。
  • 文件未正确关闭:直接用open()后没调用close(),容易导致资源泄漏,推荐用with语句自动管理。
  • 目录未提前创建:使用os.replace前如果日期目录不存在,会直接报错。

修改后的代码(适配常见需求)

假设你的需求是:每个URL对应一个文件,从files_names里取对应文件名,最终保存到日期目录下(要求urls和files_names长度一致):

import os
import requests
from datetime import datetime

today = datetime.today()
# 先创建日期目录,不存在就新建
date_dir = today.strftime('%d-%m-%Y')
if not os.path.exists(date_dir):
    os.makedirs(date_dir)

# 示例的urls和files_names(替换成你自己的)
urls = ["https://example.com/board1", "https://example.com/board2", "https://example.com/board3"]
files_names = ["board1.csv", "board2.csv", "board3.csv"]

# 用zip把URL和对应的文件名配对遍历,确保一一对应
for url, file_name in zip(urls, files_names):
    # 发送请求
    response = requests.get(url)
    # 先检查请求是否成功
    if response.status_code == 200:
        # 用with语句打开文件,自动关闭,更安全
        with open(file_name, "wb") as file:
            file.write(response.content)
        # 拼接目标路径,避免路径错误
        dest_path = os.path.join(date_dir, file_name)
        # 如果目标文件已存在,先删除(根据需求可选)
        if os.path.exists(dest_path):
            os.remove(dest_path)
        # 移动文件到日期目录
        os.replace(file_name, dest_path)
    else:
        print(f"请求URL {url} 失败,状态码:{response.status_code}")

如果你不需要预先定义文件名

要是你想给每个URL自动生成唯一文件名(不用files_names列表),可以改成这样:

import os
import requests
from datetime import datetime

today = datetime.today()
date_dir = today.strftime('%d-%m-%Y')
if not os.path.exists(date_dir):
    os.makedirs(date_dir)

urls = ["https://example.com/board1", "https://example.com/board2", "https://example.com/board3"]

# 用enumerate获取索引,给每个URL生成唯一文件名
for idx, url in enumerate(urls):
    response = requests.get(url)
    if response.status_code == 200:
        # 用索引做文件名后缀,避免重复
        file_name = f"jobboard_{idx+1}.csv"
        with open(file_name, "wb") as file:
            file.write(response.content)
        dest_path = os.path.join(date_dir, file_name)
        if os.path.exists(dest_path):
            os.remove(dest_path)
        os.replace(file_name, dest_path)
    else:
        print(f"处理第 {idx+1} 个URL {url} 时失败")

关键修改点总结

  1. 去掉了多余的jobboard_names循环,简化逻辑;
  2. 用zip或enumerate确保每个URL对应唯一的文件,避免覆盖;
  3. 提前创建日期目录,防止报错;
  4. 用with语句管理文件,自动关闭;
  5. 加入请求状态码判断,方便排查问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 12:53:11