コース一覧
    Pythonファイル・エラー・制作
    CSV形式で保存

    Pythonファイル・エラー・制作

    ファイル操作と例外処理を学び、入出力を含む小さなPython制作を安全に進められるようにします。

    1
    ファイルとエラー処理
    01. ファイルを読み込む15分
    02. ファイルに書き込む15分
    03. withで安全に扱う15分
    04. CSV形式で保存15分
    05. try-exceptで備える15分
    06. 例外の種類15分
    07. つくる:保存機能15分
    08. 第8章クイズ10分
    2
    総合制作
    01. 全機能を統合しよう15分
    02. 月間レポート機能15分
    03. 自由拡張15分
    04. 完成と次のステップ10分

    CSV形式で保存

    split で列に分ける

    辞書のままでは、ファイルに書けない

    ファイルに書けるのは文字列だけです。ところが記録は辞書のリストです。

    Python

    [{"name": "りんご", "price": 120, "category": "食費"}]

    これをそのまま write に渡すことはできません。辞書を 1 行の文字列にする決まりごと を、自分で決める必要があります。

    もっとも広く使われている決まりが CSV です。Comma Separated Values の頭文字で、値をカンマで区切って並べるだけの素朴な形式です。

    プレーンテキスト

    りんご,120,食費
    みかん,80,食費

    1 行が 1 件、カンマの区切りで 3 つの項目が並びます。表計算ソフトでもそのまま開けます。保存の形式は、あとから読み戻せることがすべてです。凝った形にするより、区切りが一目で分かる形のほうが長持ちします。

    項目と項目をつなぐのも join です。行をつなぐときは "\n" を使いましたが、今回は "," を使います。

    Python

    print(",".join(["2026", "08", "05"]))

    2026,08,05 が出ます。区切りが違うだけで、やっていることは同じです。

    join は文字列しかつなげない

    ここに落とし穴があります。金額は int です。

    Python

    print(",".join(["S", 3]))

    これは TypeError になります。メッセージは sequence item 1 と、何番目が悪いかまで教えてくれます。join がつなげるのは文字列だけなので、数値は str で変換してから渡します。

    変換する位置を間違えて、辞書全体を str に通してしまうのも定番です。{'name': 'りんご', ...} という表示用の文字列ができあがり、まったく違う行になります。かっこの中身をよく見て、金額 1 つだけを包みます。

    品名にカンマが入ると、読み戻せなくなる

    CSV の弱点も知っておきます。りんご, みかんセット のように品名自体にカンマが入ると、1 行の項目数が 3 つではなく 4 つになり、読み戻したときに対応が崩れます。

    このコースでは品名にカンマを使わない前提で進めます。実務では標準ライブラリの csv がこの問題を引き受けてくれます。

    カンマの前後に空白を入れないことも決めておきます。りんご, 120 のように書くと、読み戻した金額が " 120" になり、扱いが面倒になります。区切りはカンマ 1 文字だけにします。

    やってみよう

    関数 to_csv_lines(records) を実装してください。records は {"name": ..., "price": ..., "category": ...} の形の辞書のリストです。1 件を "品名,金額,カテゴリ" の文字列にして、その並びをリストで返します。

    金額は文字列に変換してからつなぎます。区切りはカンマだけで、前後に空白は入れません。records が空リストのときは空リスト [] が返れば正解です。

    要件

    1. 関数名は to_csv_lines で、引数は records の 1 つ
    2. 1 件を "品名,金額,カテゴリ" の順にカンマでつなぐ
    3. 金額は str で文字列にしてから join する
    4. カンマの前後に空白を入れない
    5. records が空リストのときは空リストを返す

    ヒント

    ",".join([record["name"], str(record["price"]), record["category"]]) の形です

    join がつなげるのは文字列だけなので、int の金額はそのまま渡せません

    空のリストを用意して for の中で append していきます

    リスト内包表記で 1 行にまとめても構いません

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

    関連レッスン

    • try-exceptで備える

      try と except で ValueError を受け止め、変換に失敗しても止まらない関数を書く

    • 例外の種類

      FileNotFoundError を受け止めて、保存ファイルが無い初回起動でも落ちないようにする

    • つくる:保存機能

      第8章の総仕上げ。記録をファイルに保存し、読み戻して辞書のリストに復元する

    • 第8章クイズ

      ファイルのモード、with、CSV の型の往復、except の捕捉範囲を5問で確認する

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

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

    • リスト順序付きで複数の値を扱うデータ構造
    • 標準ライブラリPythonに同梱の公式モジュール群
    • 関数処理に名前を付けて再利用できる単位
    • 引数位置引数=順番で渡す。
    • JOIN複数テーブルをくっつけて 1 つの結果に並べる SQL
    main.py
    エディタを読み込んでいます

    メモ

    CSV形式で保存

    ⌘S で保存