簡體   English   中英

如何將上傳的 CSV 文件下載為 excel 文件

[英]How to download an uploaded CSV file as excel file

這是我的觀點 function。

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上添加下載鏈接。 對於其中任何一個,如何編寫視圖 function 代碼? 上傳者視圖 function 的代碼中已經有上傳的 CSV 文件。 有什么辦法可以利用它嗎?

我還考慮從上傳器視圖 function 與我尚未創建的新下載器視圖 function 共享文件 object。 但是有沒有辦法做到這一點?

好的,所以我可以通過添加一個名為下載器的新視圖 function 下載為 excel。 我在上傳器鏈接中提供了重新上傳文件的選項,我使用該鏈接路由到下載器 function。 這是下載器 function。

@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)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM