スポンサーリンク

【Flask】Python(Flask)でcsv読み込みを行いHTMLに表示させる手順。

Flask
スポンサーリンク

今回の記事はPythpn(Flask)でcsvを読み込みHTMLに表示する流れをご紹介していきます。まずは、Flaskプロジェクトを作る必要がありますがそちらに関しては過去記事リンクから行ってみてください。(参照リンク

今回のフォルダ構成は下記です。

|-csv
|  |-AirPassenger.csv
|-templates
|  |-index.html
|-app.py

では早速CSV読み込みの流れをご紹介していきます。

スポンサーリンク

Python(Flask)でcsv読み込みを行う方法

Flaskの基本的な流れとしては「ローカルサーバを立てる」→「ローカルサーバのURLかその先のフォルダにアクセス」→「Flask(Pythonファイル)でページの表示」という流れになります。csvを読み込む場所は「Flask(Pythonファイル)でページの表示」の部分です。

ではそのcsv読み込み工程のファイルをみていきましょう。

まずは読み込むcsvです。時系列分析の際に使用したcsvです。時系列関連の記事はKerasのRNN・LSTMあたりをご参照ださい。

['1949-01', '112']
['1949-02', '118']
['1949-03', '132']
['1949-04', '129']
['1949-05', '121']
['1949-06', '135']
['1949-07', '148']
['1949-08', '148']
['1949-09', '136']
['1949-10', '119']
['1949-11', '104']
['1949-12', '118']
['1950-01', '115']
['1950-02', '126']
['1950-03', '141']
['1950-04', '135']
['1950-05', '125']
['1950-06', '149']
['1950-07', '170']
['1950-08', '170']
['1950-09', '158']
['1950-10', '133']
['1950-11', '114']
['1950-12', '140']
['1951-01', '145']
['1951-02', '150']
['1951-03', '178']
['1951-04', '163']
['1951-05', '172']
['1951-06', '178']
['1951-07', '199']
['1951-08', '199']
['1951-09', '184']
['1951-10', '162']
['1951-11', '146']
['1951-12', '166']
['1952-01', '171']
['1952-02', '180']
['1952-03', '193']
['1952-04', '181']
['1952-05', '183']
['1952-06', '218']
['1952-07', '230']
['1952-08', '242']
['1952-09', '209']
['1952-10', '191']
['1952-11', '172']
['1952-12', '194']
['1953-01', '196']
['1953-02', '196']
['1953-03', '236']
['1953-04', '235']
['1953-05', '229']
['1953-06', '243']
['1953-07', '264']
['1953-08', '272']
['1953-09', '237']
['1953-10', '211']
['1953-11', '180']
['1953-12', '201']
['1954-01', '204']
['1954-02', '188']
['1954-03', '235']
['1954-04', '227']
['1954-05', '234']
['1954-06', '264']
['1954-07', '302']
['1954-08', '293']
['1954-09', '259']
['1954-10', '229']
['1954-11', '203']
['1954-12', '229']
['1955-01', '242']
['1955-02', '233']
['1955-03', '267']
['1955-04', '269']
['1955-05', '270']
['1955-06', '315']
['1955-07', '364']
['1955-08', '347']
['1955-09', '312']
['1955-10', '274']
['1955-11', '237']
['1955-12', '278']
['1956-01', '284']
['1956-02', '277']
['1956-03', '317']
['1956-04', '313']
['1956-05', '318']
['1956-06', '374']
['1956-07', '413']
['1956-08', '405']
['1956-09', '355']
['1956-10', '306']
['1956-11', '271']
['1956-12', '306']
['1957-01', '315']
['1957-02', '301']
['1957-03', '356']
['1957-04', '348']
['1957-05', '355']
['1957-06', '422']
['1957-07', '465']
['1957-08', '467']
['1957-09', '404']
['1957-10', '347']
['1957-11', '305']
['1957-12', '336']
['1958-01', '340']
['1958-02', '318']
['1958-03', '362']
['1958-04', '348']
['1958-05', '363']
['1958-06', '435']
['1958-07', '491']
['1958-08', '505']
['1958-09', '404']
['1958-10', '359']
['1958-11', '310']
['1958-12', '337']
['1959-01', '360']
['1959-02', '342']
['1959-03', '406']
['1959-04', '396']
['1959-05', '420']
['1959-06', '472']
['1959-07', '548']
['1959-08', '559']
['1959-09', '463']
['1959-10', '407']
['1959-11', '362']
['1959-12', '405']
['1960-01', '417']
['1960-02', '391']
['1960-03', '419']
['1960-04', '461']
['1960-05', '472']
['1960-06', '535']
['1960-07', '622']
['1960-08', '606']
['1960-09', '508']
['1960-10', '461']
['1960-11', '390']
['1960-12', '432']

これを読み込みます。

from flask import Flask, render_template
import csv

app = Flask(__name__)
data = []

@app.route("/index")
def index():
    csv_content = read_csv("AirPassengers")
    for row in csv_content:
        data.append(row[0])
        print(data)
    return render_template("index.html",input_from_python= data) # templatesフォルダ内のindex.htmlを表示する

def read_csv(filename):
    csv_file = open("./csv/" + str(filename) + ".csv", "r", encoding="ms932", errors="", newline="" )
    f = csv.reader(csv_file, delimiter=",", doublequote=True, lineterminator="\r\n", quotechar='"', skipinitialspace=True)
    #f = csv.DictReader(csv_file, delimiter=",", doublequote=True, lineterminator="\r\n", quotechar='"', skipinitialspace=True)
    return f

if __name__ == "__main__":
    app.run()

「read_csv」が自作の関数です。ファイル名を引数にとってcsvフォルダ内のファイル名から読み込むファイルを指定して「csv.reader」で値を読み込んでいます。「csv.DictReader」では辞書型配列を読み込めます。この中身としてはcsvのオブジェクトになっているのでそれぞれを行に分解するためにfor文でrowに格納し、その値をさらに変数引き渡しようのキーに「append」しております。

これでFlaskのローカルサーバに読み込めているかをTerminalでかくにんできます。

では次はそれをHTMLに表示させていきます。

Python(Flask)で読み込んだcsvをHTMLに表示させる方法

<!DOCTYPE html>
<html lang="ja">

    <body>
        <button onclick=test_click()>ボタン</button>
        <script>
            function test_click(){
                let list_data = {{ input_from_python | tojson }};
                alert(list_data);
            };
        </script>
    </body>
</html>

簡単な実装です。ボタンクリック でAlertを表示させるという機能のみです。解説する箇所としては「let list_data = {{ input_from_python | tojson }};」部分で変数をJavaScriptが使用できるJson形式に変換していることくらいでしょうか。

今回の記事は以上です。他のFlask記事に関しても気になるものご参照ください。

本記事を読んでいただき感謝です。サイトを訪れていただいた方はプログラミング勉強中かと思いますのでプログラミング勉強のコツを合わせてご紹介。

スポンサーリンク
スポンサーリンク
スポンサーリンク

ブログに関しては500円程度かかりますが、それ以外は無料です。知識の吸収と並行してアウトプットは非常に効率が良いです。テックアカデミーに関しては講座レベルが高いにも関わらず、無料体験や人気口座も大幅値下げがあるので、重点的に学びたいものを無料体験してみてください。

転職時にも、エンジニアからテックアカデミー・Paizaは認知度が高いので、未経験入社採用を行う際履歴書で目に留まります。特にPaizaのスキルレベルA・SなどはIT業界でも評価されます。

テックアカデミー・Paizaの無料登録ができる期間中にぜひご利用してみてください。私も活用経験ありです。

Flask
スポンサーリンク
スポンサーリンク

コメント

  1. 秋野 より:

    csv読み込みのところを下記のようにapp.run()の前に書いてはいけないのでしょうか?

    if __name__ == “__main__”:
    csv_content = read_csv(“AirPassengers”)
    app.run()

    最初に一度読み込んで変数に格納しておけば、「/index」ページに飛んでくるたびに毎回読み込む必要はないと思うのですが・・・。

    ただ、app.run()の直前にこのような記述をしている参考書は見かけないから、やはり間違っているということなのでしょうか。

    • tomo より:

      確かに上記でもおそらく問題なく動くのではと思います。試してはいませんが。。
      通例として下記の記述が多いだけで絶対ではないと思うので動くのであれば問題なさそうですね。
      if __name__ == “__main__”:
      app.run()

  2. 秋野 より:

    このコードそのままではないのですが、app.run()の前にファイルを読み込む記述をすると、Flaskのまま実行するときは問題ないのですが、本番環境でgunicornを使うとエラーが出ました。

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