コース一覧
    Pythonエラー・データ形式
    csvモジュール

    Pythonエラー・データ形式

    例外処理とデータ形式を深め、異なる入力を検証し変換する処理を設計できるようにします。

    1
    エラー処理の設計
    01. 例外の階層15分
    02. raiseで例外を投げる15分
    03. カスタム例外15分
    04. finallyとelse15分
    05. assertで前提を守る15分
    06. つくる 入力検証の例外設計20分
    07. 第5章クイズ10分
    2
    ファイルとデータ形式
    01. csvモジュール15分
    02. JSONで保存15分
    03. JSONを読み込む15分
    04. pathlibでパス操作15分
    05. 文字コード15分
    06. つくる JSON保存へ移行20分
    07. 第6章クイズ10分

    csvモジュール

    このレッスンでできるようになること。手書きの split をやめて、標準の csv モジュールで家計簿ファイルを読み書きできるようになります。

    入門では、カンマ区切りの1行を line.split(",") で分解していました。データが「ノート,200,文具」のように素直なうちは、これで問題ありません。ところが家計簿には「コーヒー, 豆」のように、品名そのものにカンマが入る行がいつか現れます。そのとき split は品名を2つに割ってしまい、金額の位置がずれて集計が壊れます。

    この手の面倒は、CSV という形式を作った人たちがとっくに解決しています。値の中にカンマがあるときは、その値をダブルクォートで囲むという決まりです。読む側はクォートの内側のカンマを区切りとして数えません。標準ライブラリの csv モジュールは、この決まりを最初から知っています。

    書くときは csv.writer(f) を作り、writerow で1行、writerows でまとめて書きます。クォートが必要な値には、csv 側が勝手に付けてくれます。読むときは csv.reader(f) を作り、for で回すと1行が文字列のリストになって返ってきます。

    Python

    import csv
    
    with open("shishutsu.csv", "w", encoding="utf-8", newline="") as f:
        writer = csv.writer(f)
        writer.writerow(["品名", "金額"])
        writer.writerow(["コーヒー, 豆", 980])
    
    with open("shishutsu.csv", encoding="utf-8") as f:
        reader = csv.reader(f)
        for row in reader:
            print(row)

    注意することが2つあります。1つ目は、書くときの open に newline="" を付けることです。付けないと環境によっては空行が1行おきに混ざります。2つ目は、encoding="utf-8" を必ず書くことです。日本語のデータを扱うので、ここを省くと後で文字化けします。

    もう1つ覚えておきたいのが next(reader) です。1行目の見出し行を1回だけ取り出して、残りをデータとして回すときに使います。csv.reader が返す値はすべて文字列なので、金額を足すときは int(row[1]) のように数値へ戻す必要があります。

    要件

    1. csv.writer で見出し行を含む rows をすべて kakeibo_csv.csv に書き出す
    2. 書き出しの open には encoding="utf-8" と newline="" を付ける
    3. csv.reader で読み直し、next で見出し行を読み飛ばす
    4. データ行ごとに「品名 金額」を空白区切りで表示する
    5. 最後に「合計 13180」の形で合計金額を表示する

    ヒント

    まとめて書くときは writer.writerows(rows) が使えます

    見出し行は header = next(reader) で1回だけ取り出します

    csv.reader が返す値は文字列なので、足す前に int(row[1]) にします

    生田 陸人
    監修生田 陸人
    ゆめさくエンジニア / 現役ソフトウェアエンジニア監修者プロフィールを見る →
    編集 ゆめさく編集部·公開 2026/08/07

    関連レッスン

    • JSONで保存

      json.dump で入れ子の構造をそのまま保存します。

    • JSONを読み込む

      json.load で保存した構造を読み戻します。

    • pathlibでパス操作

      Path でパスを安全に組み立て、保存先を整理します。

    • 文字コード

      encoding を明示して、日本語のデータを安全に保存します。

    このレッスンに出てくる用語

    意味があいまいなまま進んだ語は、ここから読み直せます。

    • モジュール他ファイルから import できるPythonファイル
    • 標準ライブラリPythonに同梱の公式モジュール群
    • リスト順序付きで複数の値を扱うデータ構造
    • 文字化け送受信側のエンコード不一致による表示崩れ
    main.py
    エディタを読み込んでいます

    メモ

    csvモジュール

    ⌘S で保存