☆☆ 新着記事 ☆☆

2018年11月5日月曜日

Python3 CSVを読み込んでリストに格納。 -イテレータの取り扱い

csvを読み込む形式はイテレータなので、取扱いしやすいように、
for文で値を取り出し、リストに格納する。


csvファイル(sampleTest.csv)は以下の通り

山は?,Gut feeling,Mountain,River,3
川は?,Skin,River,Leather,3
空は?,Sky,Empty,Can,2
海は?,Octopus,Tuna,Sea,4

これを読み込んでリストに格納すると、

import csv

quiz = []
with open("sampleTest.csv","r", encoding='utf-8_sig') as f:
    reader = csv.reader(f)
   
    for line in reader:
        print(line)
        quiz.append(f"{line[0]}{line[1]}{line[2]}{line[3]}{line[4]}") #Python3.6以降対応。f 構文
    print(quiz)

これをJinja2のtemplatesに渡す。


from flask import Flask, render_template
import csv
app = Flask(__name__)

@app.route('/')
@app.route('/home')
def home():
    message="Good Evening!"
    quiz = []
    with open("sampleTest.csv","r", encoding='utf-8_sig') as f:
        reader = csv.reader(f)
   
        for line in reader:
            print(line)
            quiz.append(f"{line[0]}{line[1]}{line[2]}{line[3]}{line[4]}")
        print(quiz)
    return render_template("sample01.html",message=message, quiz=quiz)

if __name__ == '__main__':
    app.run(debug=True)


**(result)

*lineを指定せず、全部の値をquizに格納したい場合は、
 quiz.append(f"{line[0]}{line[1]}{line[2]}{line[3]}{line[4]}")の部分は、単純に

  for line in reader:
     quiz.append(line) で良い(はず。)

 *quiz=[]は、for文の外にあることは、当たり前ですが重要。


list関数を使うと2次元リストとして上手く格納できる。

from flask import Flask, render_template
import csv
app = Flask(__name__)

@app.route('/')
@app.route('/home')
def home():
    message="Good Evening!"
    quiz = []
    with open("sampleTest.csv","r", encoding='utf-8_sig') as f:
        reader = csv.reader(f)
        listreader=list(reader)
 
    return render_template("sample01.html",message=message, quiz=listreader)

if __name__ == '__main__':
    app.run(debug=True)

sample01.html
<html>
<head>
 <meta charset="utf-8">
</head>
<body>
 <p>{{message}}</p>
 <p>{{quiz[0]}}</p>
 <p>{{quiz[1]}}</p>

 {% for x in quiz%}
 {{ x }}
 {% endfor %}

</body>
</html>

(output2)


2次元リストを2次元リストのままにする工夫

## Test.py ##
from flask import Flask, render_template
import csv, random
app = Flask(__name__)

@app.route('/')
@app.route('/home')
def home():
    quiz = []
    quiz2 = []
    rand_quiz =[]
   
    with open("sampleTest.csv","r", encoding='utf-8_sig') as f:
        reader = csv.reader(f)
        listreader=list(reader)

        for i in range(0,len(listreader)):
            if listreader[i][0]=='ALL':
                for j in range(1,6):
                    quiz.append(listreader[i][j]) #ここで一次元リストになってしまう。
                quiz2.append(quiz)         #quizのリスト全体を要素として、新しいリスト(quiz2)を作成
                quiz=[]               #quizの初期化
       
    rand_quiz=random.sample(quiz2,len(quiz2))
       
    return render_template("sample01.html",
                           quiz=quiz2, rand_quiz=rand_quiz)

if __name__ == '__main__':
    app.run(debug=True)





関連)
Python CSVファイルの操作

0 件のコメント:

コメントを投稿