lisz-works

技術と興味の集合体

CSV入出力 Heroku×Python×Flask

【スポンサーリンク】

Heroku×Python3

Herokuでなにか作ろうと思ったときに

「なにかちょっとしたデータを管理するために簡単なものないかなー」

と考えていました。

「そういえばファイル入出力ってどうなんだ?」

と思い試してみたら、可能だったのでやったことについてご紹介です。

Heroku

ローカルでCSVを取り扱うように、普通にCSV出力すれば読み書きが可能です。
特に設定等もいりませんでした!

今回試しに、アクセスすると

  1. CSVがなかったら読み込まずに初期化
  2. CSVがあったら読み込み→値を表示
  3. 値+1を書き込む

というものを作ってみました。

CSVは試験的に複数データをセットしています。

このうち最初のデータだけを更新しています。

Read/Write

Read/Writeする関数です。

import csv
def readCsv(fname='test.csv'):
    if not os.path.exists(fname):
        return None
    readList = []
    with open(fname, 'r') as f:
        reader = csv.reader(f)
        for rows in reader:
            l = []
            for row in rows:
                l.append(row)
                # print(row)
            readList.append(l)
    return readList
def writeCsv(data, fname='test.csv'):
    with open(fname, 'w') as f:
        writer = csv.writer(f, lineterminator='\n')
        writer.writerows(data)

route

読み込むたびにアップデート

@app.route("/")
def hello():
    readData = readCsv()
    if readData is None:
        readData = [[1, 2, 3], [4, 5, 6]]
    else:
        print(readData)
        readData[0][0] = str(int(readData[0][0]) + 1)
    writeCsv(readData)
    text = ''
    for datas in readData:
        for data in datas:
            text += str(data)
    return "hello! " + text

参考

コチラを参考にしました。ありがとうございました。

qiita.com

qiita.com

あとがき

HerokuでCSV入出力をするサンプルでした!

データ管理をしようと思ったら、DBとか使うしかないのかなーと思っていました。
なのでこれならユーザ入力出ないようなものは簡単に取り扱えそうですね!

ユーザデータを登録するような仕組みが必要なものなら、DBを覚えないとだめそうな気がします。

Herokuに興味があればコチラもどうぞ。

www.lisz-works.com