python - 如何将上传的 CSV 文件下载为 excel 文件
问题描述
这是我的视图功能。
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>
这就是我可以在 HTML (uploader.html) 中看到上传的 CSV 的地方。
{% extends "base.html" %}
{% block content %}
{{ data | safe }}
{% endblock %}
现在,我想将上传的 CSV 文件下载为 excel。有什么我可以遵循的方法吗?我应该在 uploader.html 文件或 index.html 上添加下载链接吗?对于其中任何一个,如何编写视图函数代码?上传者视图函数的代码中已经包含上传的 CSV 文件。有什么办法可以利用它吗?
我还在考虑将上传器视图功能中的文件对象与我尚未创建的新下载器视图功能共享。但是有没有办法做到这一点?
解决方案
好的,所以我可以通过添加一个名为下载器的新视图功能下载为 excel。我提供了在上传程序链接中重新上传文件的选项,我使用该链接路由到下载程序功能。这是下载器功能。
@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)
推荐阅读
- javascript - Azure 媒体播放器在第二次单击浅灰色弹出窗口时不播放视频
- python - 无法确定 Cassandra 中 Select 查询速度慢的原因
- bash - 关联数组的键 ${!a[@]} 和值 ${a[@]} 是否以相同的顺序展开?
- unity3d - 什么是统一的百日草
- java - 为什么@Spy Abc abc 无法获取已经存在的实例?
- javascript - 从选择下拉列表中添加值反应
- jmeter - 如何从 JMeter 的 ForEach 控制器中的变量中获取对象
- javascript - 从 html5 播放器获取播放时间并发送到 Django 函数
- r - 从 DNAStringSet 中对定义的组进行子集化
- javascript - React Native 中的屏幕不会自动刷新