LoginSignup
15
21

More than 3 years have passed since last update.

FlaskでCSVリーダーを作成する

Last updated at Posted at 2017-06-06

前回はPDFをテキストへ変換したので、今回はCSVリーダーを作成します。コード自体はファイルアップロードなので、殆ど同じような感じになります。

csvopnener.py
import os
import csv
from flask import Flask, render_template, request, redirect, url_for, send_from_directory, session
from werkzeug.utils import secure_filename
app = Flask(__name__)

UPLOAD_FOLDER = './uploads'
ALLOWED_EXTENSIONS = set(['csv'])
app.config['UPLOAD_FOLDER'] = UPLOAD_FOLDER
app.config['SECRET_KEY'] = os.urandom(24)

def allowed_file(filename):
    return '.' in filename and \
        filename.rsplit('.', 1)[1] in ALLOWED_EXTENSIONS

@app.route('/')
def index():
    return render_template('csv.html')


@app.route('/show_csv', methods=['GET', 'POST'])
def show_csv():
    if request.method == 'POST':
        send_data = request.files['send_data']
        if send_data and allowed_file(send_data.filename):
            filename = secure_filename(send_data.filename)
            send_data.save(os.path.join(app.config['UPLOAD_FOLDER'], filename))
            f = open('uploads/' + filename, 'r')
            f_reader = csv.reader(f)
            result = list(f_reader)

            return render_template('csv.html', result=result)


@app.route('/uploads/<filename>')
def uploaded_file(filename):
    return send_from_directory(app.config['UPLOAD_FOLDER'], filename)

if __name__ == '__main__':
    app.debug = True
    app.run()
csv.html
{% extends "base.html" %}
{% block content %}
<form method="post" action="{{ url_for('show_csv') }}" enctype="multipart/form-data">
  <input type="file" id="send_data" name="send_data">
  <input type="submit" value="送信">
</form>
<div>
  {% if result %}
  <dl>
  {% for i in result %}
    <dt>{{ i[0] }}<dt>
    <dd>{{ i[1] }}</dd>
  {% endfor %}
  </dl>
  {% endif %}
</div>
{% endblock %}

実行

スクリーンショット 2017-06-06 12.24.55.png

このようなテスト用CSVファイルを用意しました。

スクリーンショット 2017-06-06 12.25.30.png

カスタマイズすればCSVに行を追加など、結構いいんじゃないかと感じました。

15
21
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
15
21