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

Flask应用加载CSV时数字字符串转float失败,求助排查

问题分析与解决方案

你的核心问题是CSV文件的分隔符不匹配:从错误信息里的字符串'142.2;480;1054;...'可以看出,你的CSV实际用分号(;)作为字段分隔符,但代码里设置的是逗号(delimiter=',')。这导致csv.reader把整行内容当成单个字符串,QUOTE_NONNUMERIC自然无法将其转换为float类型。

另外代码里还有一个小错误:你已经从flask导入了request,但调用时写成了flask.request,会导致NameError,需要修正为request。

修改后的代码

from flask import Flask, jsonify, render_template, request
import csv
import codecs

app = Flask(__name__)

@app.route("/submit", methods=["POST"])
def submit():
    file = request.files["data_file"]
    if not file:
        return "No file submitted"
    data = []
    stream = codecs.iterdecode(file.stream, encoding='utf-8-sig')
    # 将分隔符改为分号,匹配CSV实际格式
    for row in csv.reader(stream, delimiter=';', quoting=csv.QUOTE_NONNUMERIC, dialect="excel"):
        data.append(row)
    
    return jsonify(data)

if __name__ == "__main__":
    app.run(host='0.0.0.0', debug=True)

更灵活的方案:自动检测分隔符

如果不确定CSV的分隔符,可以用csv.Sniffer自动探测,适配不同格式的CSV文件:

@app.route("/submit", methods=["POST"])
def submit():
    file = request.files["data_file"]
    if not file:
        return "No file submitted"
    data = []
    stream = codecs.iterdecode(file.stream, encoding='utf-8-sig')
    
    # 自动探测CSV方言(包括分隔符)
    sample = stream.read(1024)
    dialect = csv.Sniffer().sniff(sample)
    stream.seek(0)  # 重置流指针到文件开头
    
    for row in csv.reader(stream, dialect=dialect, quoting=csv.QUOTE_NONNUMERIC):
        data.append(row)
    
    return jsonify(data)

内容的提问来源于stack exchange,提问作者Nicolás

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 21:15:43