如何将Excel或CSV文件作为Pandas数据帧上传到Flask?

8

我一直在尝试将csv / excel文件作为pandas数据帧上传到flask应用程序。 我找不到任何可以帮助上传文件作为数据帧的方法。 以下是使用的代码。

from flask import Flask, request, render_template
from werkzeug import secure_filename
import pandas as pd
app = Flask(__name__)

@app.route('/upload')
def upload():
    return render_template('upload.html')

@app.route('/uploader',methods = ['GET','POST'])
def uploader():
    if request.method == 'POST':
        #f = request.files['file']
        df = pd.read_csv(request.files.get('file'))
        #f.save(secure_filename(f.filename))
        #df = pd.DataFrame(eval(f))
        return print(df.shape)

if __name__ == '__main__':
    app.run(debug = True)
1个回答

12
你在代码中没有提供你所使用的模板(upload.html)。此外,return print(...) 返回None,而None不是 Flask 视图的有效响应。
这里有一个可行的例子:

upload.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<form method=post enctype=multipart/form-data>
    <input type=file name=file>
    <input type=submit value=Upload>
</form>
Shape is: {{ shape }}
</body>
</html>

app.py

from flask import Flask, request, render_template
import pandas as pd

app = Flask(__name__)

@app.route('/upload', methods=['GET', 'POST'])
def upload():
    if request.method == 'POST':
        df = pd.read_csv(request.files.get('file'))
        return render_template('upload.html', shape=df.shape)
    return render_template('upload.html')

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

虚拟.csv

id,name,surname
1,John,Doe
2,Jane,Doe

上传 dummy.csv 文件后的结果为:
图片描述


嗨@kchomski,我有另一个对象,比如{{shape}},称为{{columns}},它是df.columns,我想在if循环运行并显示形状后显示它,以及第二个返回值,但循环在满足if条件后停止在第一个返回处。我该怎么做才能得到我想要的? - Bharat Ram Ammu

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接