PythonでFlaskを用いてcsvファイルをダウンロードできるようにする

スポンサーリンク

PythonでFlaskを用いてcsvファイルをダウンロードできるようにしてみます。

今回はFlaskを用います。このライブラリ・モジュールはPythonの標準ライブラリではありませんので、事前にインストールする必要があります。

■Python

今回のPythonのバージョンは、「3.8.5」を使用しています。(Windows10)(pythonランチャーでの確認)

■csvファイルを用意する

Flaskを用いてcsvファイルをダウンロードできるようにしてみますが、その前にcsvファイルを用意します。

csvファイルを用意するにあたり、今回はGoogleスプレッドシートで上記のデータを作成しました。作成後「ファイル」の「ダウンロード」から「カンマ区切り形式(.csv)」をクリックし、csvファイルをダウンロードします。ダウンロード後、ファイルの名前を「test01.csv」にします。

名前を変更後、「C:\Users\user_\outputs(フォルダパス)」内にcsvファイルを移動させます。これでcsvファイルの用意は完了です。

なお、この作業はcsvファイルをダウンロードする際に必要で、指定の場所にcsvが置かれていないと、スクリプトを実行した時に「FileNotFoundError: [Errno 2] No such file or directory」といったエラーが発生します。

■Flaskを用いてcsvファイルをダウンロードする

ファイルの用意できましたので、Flaskを用いてcsvファイルをダウンロードできるようにするスクリプトを書いていきます。

■コード

from flask import Flask
from flask import send_file

app = Flask(__name__)

@app.route("/get-csv")
def plot_csv():
    return send_file("outputs/test01.csv",
    mimetype="text/csv",
    attachment_filename="test01.csv",
    as_attachment=True,
    )

if __name__ == "__main__":
    app.run(port=8000, debug=True)

今回はflaskモジュールでFlaskとsend_fileを呼び出します。その後、appという変数を定義し、その中でFlask(__name__)を格納し、Flaskのインスタンスを作成します。

作成後、「@app.route()」を用いてURLとfuncitonを関連付けします。今回のURLは「/get-csv」とし、関数はplot_csv()という関数を定義します。関数が呼び出された時に実行される処理としては、send_file()を用いてファイルの内容をクライアントに送信します。括弧内には、第1の引数,パラメータとしては送信するファイルのファイル名を渡します。今回は用意した「test01.csv」を渡します。第2の引数,パラメータ(mimetype=)としては提供されている場合はファイルのmimetype(ファイルの種類を表すもの)を渡します。今回は「text/csv」とします。第3の引数,パラメータ(attachment_filename=)としては添付ファイルがファイルのファイル名と異なる場合の添付ファイルのファイル名を渡します。今回は「test01.csv」とします。第4の引数,パラメータ(as_attachment=)としてはWebブラウザ上に対象のファイルを表示するかの設定を渡します。今回は「True(真)」とします。

最後に「app.run(port=8000, debug=True)」を用いて、サーバーを起動します。

■実行・検証

このスクリプトを「fa_csv.py」という名前で、Pythonが実行されている作業ディレクトリ(カレントディレクトリ)に保存し、コマンドプロンプトから実行してみます。

 * Serving Flask app "fa_csv" (lazy loading)
 * Environment: production
   WARNING: This is a development server. Do not use it in a production deployment.
   Use a production WSGI server instead.
 * Debug mode: on
 * Restarting with windowsapi reloader
 * Debugger is active!
 * Debugger PIN: 107-688-714
 * Running on http://127.0.0.1:8000/ (Press CTRL+C to quit)

実行してみると、上記のメッセージが出力され、サーバーが起動します。起動後、Webブラウザを起動し、アドレスバーに「http://127.0.0.1:8000/」を入力し、アクセスしますが、今回は末尾に「get-csv」を付けてアクセスします。

アクセスすると、今回用意したcsvファイルがダウンロードできるようになっていることを確認できました。

コメント

タイトルとURLをコピーしました