コース一覧
    Pythonエラー・データ形式
    つくる JSON保存へ移行

    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分

    つくる JSON保存へ移行

    このレッスンでできるようになること。この章で覚えた csv と json と pathlib だけを使って、古い CSV の家計簿を月ごとの JSON へ移す処理を1本書けるようになります。新しい文法は出てきません。

    やることは、実際の現場でよくある移行作業そのものです。もともとの家計簿は1行1支出の CSV でした。これを「月をキー、支出のリストを値とする辞書」に組み替えて JSON で保存し直します。移行が終われば、月別の集計をするたびに全行を読み直して日付を切り出す必要がなくなります。

    組み立ては次の流れです。まず pathlib で保存先のフォルダを作り、その中に元の CSV を用意します。次に csv.reader で読み込み、見出し行を読み飛ばして、1行を1つの辞書に直します。金額はこのとき int に直しておきます。csv から返る値はすべて文字列だからです。

    続いて月ごとにまとめます。日付が "2026-08-03" の形なので、先頭7文字を取れば "2026-08" になります。grouped.setdefault(key, []).append(r) の形を使うと、キーが無ければ空リストを作ってから追加してくれるので、if で分岐せずに済みます。

    最後に json.dump で書き出し、書いたファイルを json.load で読み戻して件数と合計を表示します。移行処理では、書きっぱなしにせず必ず読み戻して確かめるのが鉄則です。書けたつもりで壊れていたら、元データを消したあとでは取り返しがつきません。

    処理を load_csv と group_by_month の2つの関数に分けておくと、あとで CSV の列が増えたときに直す場所がはっきりします。移行スクリプトは一度きりの使い捨てに見えますが、たいてい何度か作り直すことになるので、読める形にしておく価値があります。

    要件

    1. Path で kakeibo_migrate フォルダを exist_ok=True 付きで作る
    2. csv.writer で ROWS を kyu_kakeibo.csv に書き出す (newline="" と encoding="utf-8" を付ける)
    3. load_csv は CSV を読んで、見出しを飛ばし、日付・品名・金額・カテゴリのキーを持つ辞書のリストを返す。金額は int にする
    4. group_by_month は日付の先頭7文字をキーにして辞書へまとめる
    5. json.dump で kakeibo.json に保存し (ensure_ascii=False, indent=2)、json.load で読み戻す
    6. 「移行した件数 4」、月ごとに「月 合計 円」、最後に「保存先 パス」を表示する

    ヒント

    見出し行は next(reader) で1回だけ読み飛ばします

    月は r["日付"][:7] で取り出せます

    まとめるときは grouped.setdefault(month, []).append(r) が短く書けます

    月の並び順は sorted(restored) で固定します

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

    関連レッスン

    • 第6章クイズ

      ファイルとデータ形式の理解を確認します。

    • 文字コード

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

    • pathlibでパス操作

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

    • JSONを読み込む

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

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

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

    • applicationJSON 本文を送るときの Content-Type
    • 処理計算や代入を表す長方形
    • リスト順序付きで複数の値を扱うデータ構造
    • 関数処理に名前を付けて再利用できる単位
    main.py
    エディタを読み込んでいます

    メモ

    つくる JSON保存へ移行

    ⌘S で保存