如何在Flask中处理上传文件?

时间:2016-09-04 21:12:09

标签: python html flask

我有一个简单的Flask应用程序,我希望它能够处理上传的excel文件并在网页中显示它的数据。到目前为止,我有一个页面来上传excel文件。

main.py

from flask import Flask, render_template, send_file, request
from flask_uploads import UploadSet, configure_uploads, DOCUMENTS, IMAGES

app = Flask(__name__)

#the name 'datafiles' must match in app.config to DATAFILES
docs = UploadSet('datafiles', DOCUMENTS)
app.config['UPLOADED_DATAFILES_DEST'] = 'static/uploads'
configure_uploads(app, docs)

@app.route("/", methods=['GET'])
def index():
  # return send_file("templates/index.html")
  return render_template('index.html')

@app.route("/upload", methods = ['GET', 'POST'])
def upload():
  #user_file is the name value in input element
  if request.method == 'POST' and 'user_file' in request.files:
    filename = docs.save(request.files['user_file'])
    return filename
  return render_template('upload.html')

@app.route("/mergedata", methods=['GET'])
def merge_data():
   return send_file("templates/mergeDataPage.html")

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

upload.html

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <title>upload</title>
  </head>
  <body>
    <form method="POST" enctype=multipart/form-data action ="{{url_for('upload')}}">
      <input type="file" name="user_file">
      <input type="submit">
    </form>
  </body>
</html>

上传文件后,我想使用另一个python脚本处理这个excel数据 - 这个脚本将获取excel文件,删除特殊字符并转换为csv文件/输出。我想在网页上显示csv输出。

这个想法是让用户上传文件,按一个按钮清理数据并将结果打印在输出框中。我该如何构建类似这种情况的东西呢?

我对Flask很新,但到目前为止,学习这个很酷的Web框架已经非常令人兴奋了。感谢您的帮助,谢谢!

1 个答案:

答案 0 :(得分:1)

您可以使用pandas模块并首先转换excel文件。

import pandas as pd
data_xls = pd.read_excel('your_workbook.xls', 'Sheet1', index_col=None)
data_xls.to_csv('your_csv.csv', encoding='utf-8')

Pandas对于处理csv文件非常引人注目,以下代码将是您阅读csv并将整个列保存到变量中所需的全部内容:

import pandas as pd
df = pd.read_csv(csv_file)
saved_column = df.column_name #you can also use df['column_name']

例如,如果您想将列Names中的所有信息保存到变量中,这就是您需要做的:

names = df.Names