CSV形式で保存
辞書のままでは、ファイルに書けない
ファイルに書けるのは文字列だけです。ところが記録は辞書のリストです。
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 が空リストのときは空リスト [] が返れば正解です。
要件
- 関数名は to_csv_lines で、引数は records の 1 つ
- 1 件を "品名,金額,カテゴリ" の順にカンマでつなぐ
- 金額は str で文字列にしてから join する
- カンマの前後に空白を入れない
- records が空リストのときは空リストを返す