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

Flask API调用Kaggle数据集出现404错误的技术求助

问题描述

我正在用Python Flask API构建一个提取Kaggle公开CSV文件的接口,目标数据集是alphiree的cardiovascular-diseases-risk-prediction-dataset,要提取的文件是CVD_cleaned.csv。

使用的脚本如下:

from flask import Flask, request, jsonify
import pandas as pd
from kaggle.api.kaggle_api_extended import KaggleApi

app = Flask(__name__)

api = KaggleApi()
api.authenticate()

def get_file_from_kaggle(dataset_value, select):
    dataset = str(dataset_value)
    file_name = str(select)
    path = 'Assessment/files/'
    api.dataset_download_files(dataset, file_name, path, unzip=True)
    csv_file = f'./{select}'
    return pd.read_csv(csv_file)

@app.route("/get-kaggle-data/<dataset_value>", methods=["GET"])
def get_kaggle_data(dataset_value):
    try:
        select = request.args.get("select")
        if select:
            df = get_file_from_kaggle(dataset_value, select)
            return df.to_json(orient='records')
        else:
            return jsonify({'error': 'Missing "select" parameter'}), 400
    except Exception as e:
        return jsonify({'error': str(e)}), 500

if __name__ == "__main__":
    app.run(debug=True)

测试URL:http://127.0.0.1:5000/get-kaggle-data/alphiree/cardiovascular-diseases-risk-prediction-dataset?select=CVD_cleaned.csv

访问时出现404 Not Found错误,请求解决该问题。


问题分析与解决

出现404的核心原因是Flask默认的路由参数无法匹配包含斜杠的字符串:路由定义/get-kaggle-data/<dataset_value>只能捕获单个路径段(无斜杠的字符串),但测试URL中的alphiree/cardiovascular-diseases-risk-prediction-dataset包含斜杠,被Flask解析为两个独立路径段,导致无法匹配到对应路由。

解决步骤

  1. 修改路由规则,使用路径转换器
    将路由改为@app.route("/get-kaggle-data/<path:dataset_value>", methods=["GET"]),path:转换器允许参数包含斜杠,能完整捕获alphiree/cardiovascular-diseases-risk-prediction-dataset这个完整数据集标识。

  2. 修正文件读取路径(可选但必要)
    原脚本中下载的文件存放在Assessment/files/目录,但读取时直接用./{select}会找不到文件,需调整读取路径:

    csv_file = f'./Assessment/files/{select}'
    

修改后的完整脚本

from flask import Flask, request, jsonify
import pandas as pd
from kaggle.api.kaggle_api_extended import KaggleApi

app = Flask(__name__)

api = KaggleApi()
api.authenticate()

def get_file_from_kaggle(dataset_value, select):
    dataset = str(dataset_value)
    file_name = str(select)
    path = 'Assessment/files/'
    api.dataset_download_files(dataset, file_name, path, unzip=True)
    # 修正文件读取路径
    csv_file = f'./{path}{select}'
    return pd.read_csv(csv_file)

# 使用path转换器匹配含斜杠的参数
@app.route("/get-kaggle-data/<path:dataset_value>", methods=["GET"])
def get_kaggle_data(dataset_value):
    try:
        select = request.args.get("select")
        if select:
            df = get_file_from_kaggle(dataset_value, select)
            return df.to_json(orient='records')
        else:
            return jsonify({'error': 'Missing "select" parameter'}), 400
    except Exception as e:
        return jsonify({'error': str(e)}), 500

if __name__ == "__main__":
    app.run(debug=True)

验证

修改后重启Flask服务,使用原测试URL访问即可正常获取数据。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 20:13:17