今回やること
CSVの点数表を読み込み、平均点を計算します。
CSVは表データの保存に使われるため、点数表や名簿の練習に向いています。
CSVの平均点は、csv.DictReaderでscore列を取り出し、int()で数値へ変換してから、合計を件数で割ると計算できます。CSVの読み書きの基本とPythonの数値計算を先に確認すると、各処理の役割を追いやすくなります。
完成コード
csv_average_score.py を作ります。
import csv
rows = [
["name", "score"],
["Ada", "90"],
["Taro", "70"],
["Mina", "80"],
]
with open("scores.csv", "w", encoding="utf-8", newline="") as file:
writer = csv.writer(file)
writer.writerows(rows)
scores = []
with open("scores.csv", "r", encoding="utf-8") as file:
reader = csv.DictReader(file)
for row in reader:
scores.append(int(row["score"]))
average = sum(scores) / len(scores)
print(f"平均点: {average:.1f}点")
動作確認
python csv_average_score.py
平均点: 80.0点 と表示されれば成功です。
同じフォルダにコードどおりscores.csvが作られているかも確認します。ファイル内容は見出しを含む4行です。実行コマンドは環境によりpython3またはpyを使います。
コードの考え方
- 先に練習用CSVを作成しています
csv.DictReaderで見出し名から値を取り出します- CSVの値は文字列なので
int()で数値に変換します sum(scores) / len(scores)で平均を出します
よくあるエラー
| エラー | 原因 | 修正 |
|---|---|---|
KeyError | 見出し名が違う | score の表記を確認 |
ValueError | 数字でない点数がある | CSVの値を確認 |
ZeroDivisionError | 点数が0件 | 空のCSVを避ける |
空のCSVも扱うなら、平均計算の前にif len(scores) == 0:で止めます。数値でない行を黙って無視すると入力ミスを見逃すため、まず該当行を確認してください。
練習
- 点数を5人分に増やす
- 最高点を表示する
- 60点以上の人数を数える
リスト上の点数から評価と合否も出す場合は、成績判定ツールへ進みます。
次のステップ
CSVから特定の人を探す場合は Pythonミニ制作:CSVの名簿を検索する に進みます。