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

如何在Flask中将上传的CSV文件转换为指定格式的二维列表?

Flask上传文件转指定结构二维列表解决方案

嘿,我来帮你搞定这个问题!先梳理下你的场景:
你正在开发一个Flask项目,已经实现了从MySQL导出.csv文件供下载的功能,示例CSV内容大概是这样的:

1,17.0,46.0,2.80696,0.559892,0.534016,0.543017,24.25,22:30:00,2020-04-28
2,17.0,47.0,2.80884,0.559142,0.534016,0.537016,24.5,23:00:00,2020-04-28
3,16.0,53.0,2.80921,0.547517,0.534016,0.537016,24.5,23:30:00,2020-04-28
4,16.0,49.0,2.80959,0.548079,0.534016,0.537016,24.25,00:00:00,2020-04-29

现在你的服务器/upload路由支持文件上传,但目前只会返回纯文本内容,你想把这些纯文本转换成指定结构的二维列表,试了几种方法都没成功,当前的路由代码是这样的:

@app.route('/upload',methods = ['POST'])
def upload_route_summary():
    if request.method == 'POST':
        f = request.files['fileupload']
        fstring = f.read()
        return fstring的内容

问题根源&解决方案

你当前的代码里,f.read()返回的是字节串(bytes类型),而且直接返回纯文本没有做解析。下面给你两种可行的方案,优先推荐第一种,因为能处理CSV的各种边缘情况:

方案1:用Python内置csv模块(推荐,稳!)

csv模块是Python官方专门用来处理CSV文件的工具,能自动处理字段含逗号、换行符等特殊情况,代码修改如下:

from flask import Flask, request, jsonify
import csv
from io import StringIO

@app.route('/upload', methods=['POST'])
def upload_route_summary():
    if request.method == 'POST':
        f = request.files['fileupload']
        # 第一步:把字节串解码成字符串,编码要和上传文件一致,一般是utf-8,Windows生成的可能是gbk
        file_content = f.read().decode('utf-8')
        # 第二步:用StringIO把字符串转成类文件对象,让csv模块能直接读取
        csv_buffer = StringIO(file_content)
        # 第三步:用csv.reader解析成二维列表
        csv_reader = csv.reader(csv_buffer)
        data_list = list(csv_reader)
        # 可以直接返回二维列表,或者转成JSON返回(前端更友好)
        return jsonify(data_list)

方案2:手动分割(适合格式绝对简单的场景)

如果你的CSV内容绝对不会出现字段含逗号、引号的情况,也可以手动分割字符串,代码更简洁:

from flask import Flask, request, jsonify

@app.route('/upload', methods=['POST'])
def upload_route_summary():
    if request.method == 'POST':
        f = request.files['fileupload']
        # 解码成字符串
        file_content = f.read().decode('utf-8')
        # 按行分割,去掉首尾空白行
        lines = file_content.strip().split('\n')
        # 每行按逗号分割成子列表,组成二维列表
        data_list = [line.split(',') for line in lines]
        return jsonify(data_list)

注意事项

  • 编码问题:一定要确认上传文件的编码,比如Windows默认生成的CSV是gbk,如果解码报错,可以试试decode('gbk')或者decode('utf-8-sig')(处理带BOM的UTF-8文件)。
  • 返回格式:用jsonify返回JSON格式比返回字符串更适合前端处理,能直接解析成JS数组。
  • 边缘情况:如果你的CSV里有带引号的字段(比如"张三,李四",25),手动分割会出错,所以务必优先用csv模块。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.08 15:42:41