#python #pandas #flask
#python #pandas #flask
Вопрос:
Вот моя функция просмотра.
from flask import Flask
from config import Config
app = Flask(__name__)
UPLOAD_FOLDER = 'filepath'
app.config['UPLOAD_FOLDER'] = UPLOAD_FOLDER
@app.route('/uploader', methods=['GET', 'POST'])
@login_required
def uploader():
f = request.files['file']
if not f:
return "No file"
stream = io.StringIO(f.stream.read().decode("UTF8"), newline=None)
file = pd.read_csv(stream)
return render_template("uploader.html", data=file.to_html())
Это индексная HTML-страница для загрузки, куда я добавляю код формы (index.html ).
<form action = "/uploader" method = "POST"
enctype = "multipart/form-data">
<input type = "file" name = "file" />
<br>
<input type = "submit"/>
</form>
И именно здесь я могу увидеть загруженный CSV в формате HTML (uploader.html ).
{% extends "base.html" %}
{% block content %}
{{ data | safe }}
{% endblock %}
Теперь я хочу загрузить загруженный файл CSV в формате Excel. Есть ли какой-либо подход, которому я могу следовать? Должен ли я добавить ссылку для скачивания на uploader.html файл или index.html . И для любого из них, как написать код функции просмотра? Функция просмотра загрузчика уже имеет загруженный файл CSV в своем коде. Есть ли какой-либо способ, которым я могу это использовать?
Я также думал о совместном использовании объекта file из функции просмотра загрузчика с новой функцией просмотра загрузчика, которую я еще не создал. Но есть ли какой-либо способ сделать это?
Ответ №1:
Хорошо, итак, я смог загрузить как excel, добавив новую функцию просмотра под названием downloader. Я дал возможность повторно загрузить файл по ссылке загрузчика, используя которую я перенаправил на функцию загрузчика. Это функция загрузчика.
@app.route("/downloader", methods=['GET', 'POST'])
@login_required
def downloader():
f = request.files['file']
if not f:
return "No file"
stream = io.StringIO(f.stream.read().decode("UTF8"), newline=None)
df_new = pd.read_csv(stream)
output = BytesIO()
writer = pd.ExcelWriter(output, engine='xlsxwriter')
df_new.to_excel(writer, sheet_name='Sheet1')
writer.save()
output.seek(0)
return send_file(output, attachment_filename='output.xlsx', as_attachment=True)