pathlibでパス操作
このレッスンでできるようになること。pathlib の Path を使って、家計簿の保存先を安全に組み立てられるようになります。
ここまではファイル名を "kakeibo.json" のように直接書いてきました。保存先をフォルダで分けたくなると、"kakeibo/" + name + ".json" のような文字列の足し算が始まります。この書き方は、スラッシュを2つ重ねたり付け忘れたり、Windows の区切り文字と食い違ったりと、地味に事故が起きます。
標準ライブラリの pathlib は、パスを文字列ではなく Path というオブジェクトで扱います。特徴は、区切り文字がスラッシュ演算子になることです。
from pathlib import Path
base = Path("kakeibo_data")
path = base / "2026-08.csv"
print(path)base / "2026-08.csv" は割り算ではなく、パスの連結です。区切り文字はその環境に合ったものが自動で入るので、付け忘れも重複もありません。
Path には、名前を分解して取り出す属性がそろっています。name はファイル名そのもの、stem は拡張子を除いた部分、suffix は拡張子、parent は1つ上のフォルダです。ファイル名から月を取り出したいときは path.stem で済みます。
フォルダを作るのは mkdir です。すでにあるときにエラーにしたくないので、base.mkdir(exist_ok=True) と書くのが定番です。途中のフォルダごと作るなら parents=True も足します。存在の確認は path.exists()、ファイルかどうかは path.is_file() です。
読み書きも Path から直接できます。path.write_text(text, encoding="utf-8") と path.read_text(encoding="utf-8") は、open と with を書かずに1行で済ませたいときに便利です。encoding は open のときと同じく必ず指定します。
フォルダの中身を一覧するには base.glob("*.csv") を使います。家計簿のファイルを月ごとに分けて置いておき、あとからまとめて集計するときに効いてきます。
要件
- base = Path("kakeibo_files") を作り、exist_ok=True 付きで mkdir する
- path = base / "2026-08.csv" のようにスラッシュ演算子で組み立てる
- path.write_text で "ノート,200\nコーヒー豆,980\n" を encoding="utf-8" 付きで書く
- path、続けて name と stem と suffix を空白区切り、続けて parent、続けて exists() を表示する
- 最後に read_text で読んだ中身を splitlines で1行ずつ表示する
入出力例
出力: "kakeibo_files/2026-08.csv
2026-08.csv 2026-08 .csv
kakeibo_files
True
ノート,200
コーヒー豆,980
"