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 件のコメント:
コメントを投稿