今回やること
Pythonでは標準ライブラリの csv を使い、CSVを1行ずつリストまたは辞書として読み書きできます。見出し名で値を取り出したい場合は DictReader が便利です。
CSVは、表データをテキストで保存する形式です。
CSVを扱えると、名簿、点数表、売上表のようなデータをPythonで処理できます。
今回は、標準ライブラリの csv を使って読み書きします。
CSVを書き込む
import csv
with open("scores.csv", "w", encoding="utf-8", newline="") as file:
writer = csv.writer(file)
writer.writerow(["name", "score"])
writer.writerow(["Ada", 90])
writer.writerow(["Taro", 75])
writerow() は、1行分のデータを書き込みます。
CSVも通常のファイルなので、open のmode、文字コード、現在地が影響します。前提が不安な場合は Pythonでファイルを読み書きする方法 を先に確認してください。
CSVを読み込む
import csv
with open("scores.csv", "r", encoding="utf-8") as file:
reader = csv.reader(file)
for row in reader:
print(row)
読み込んだ1行はリストとして扱えます。
DictReaderを使う
import csv
with open("scores.csv", "r", encoding="utf-8") as file:
reader = csv.DictReader(file)
for row in reader:
print(row["name"], row["score"])
見出し行があるCSVでは、DictReader が読みやすいです。
CSVから読んだ値は基本的に文字列です。点数を計算するなら int(row["score"]) のように変換します。平均点まで作る例は CSVの点数表から平均点を出す で、条件に合う行を探す例は CSVの名簿を検索する で練習できます。
よくあるエラー
| エラー | 原因 | 修正 |
|---|---|---|
| 空行が入る | newline="" がない | 書き込み時に指定する |
KeyError | 見出し名が違う | CSVの1行目を確認 |
| 文字化け | 文字コードが違う | utf-8 や utf-8-sig を試す |
練習
- 名前と点数のCSVを作る
- CSVを読み込んで表示する
DictReaderで名前だけ表示する- 点数が80以上の人だけ表示する
次のステップ
標準ライブラリを使う考え方は Pythonのimport で整理します。