結論から言うと、pathlib はファイルやフォルダのパスを文字列ではなく、Path オブジェクトとして扱うための標準ライブラリです。

Pythonでファイルを扱う処理を書くと、フォルダ名とファイル名をつなげたり、存在確認をしたり、拡張子でファイルを探したりする場面がよくあります。
そのような処理を文字列だけで書くと、区切り文字や相対パスの扱いで読みにくくなることがあります。
この記事では、レポート用フォルダを作り、テキストファイルを保存して一覧表示する例を使って、pathlib の基本を整理します。

この記事でわかること

  • pathlib.Path の基本的な使い方
  • パスを安全に組み立てる考え方
  • 実務のファイル処理でよく使う操作

完成コード

完成コードは次の通りです。

from pathlib import Path


def save_report(base_dir: Path, file_name: str, lines: list[str]) -> Path:
    report_dir = base_dir / "reports"
    report_dir.mkdir(parents=True, exist_ok=True)

    report_path = report_dir / file_name
    report_path.write_text("\n".join(lines), encoding="utf-8")
    return report_path


def list_text_files(folder: Path) -> list[Path]:
    return sorted(folder.glob("*.txt"))


base_dir = Path("work")
saved_path = save_report(
    base_dir,
    "sales_report.txt",
    ["売上レポート", "合計: 12000円", "件数: 5件"],
)

print(f"保存しました: {saved_path}")

for path in list_text_files(base_dir / "reports"):
    print(f"見つかったファイル: {path.name}")

このコードを実行すると、work/reports/sales_report.txt が作成され、同じフォルダ内の .txt ファイル名が表示されます。

コードのポイント

このコードでは、Path を使ってフォルダとファイルのパスを組み立てています。

  • Path("work") で作業フォルダを表しています
  • / 演算子でフォルダ名やファイル名をつなげています
  • mkdir() でフォルダを作成しています
  • write_text() でテキストファイルを書き込んでいます
  • glob("*.txt") でテキストファイルを探しています

pathlib を使うと、ファイルパスを単なる文字列ではなく「パスとして操作できる値」として扱えます。
ファイル操作の見通しをよくしたいときに、最初に覚えておきたい標準ライブラリです。

コードを順番に説明します

主要な処理を分けて説明します。

1. Pathで作業フォルダを表します

from pathlib import Path

base_dir = Path("work")

Path("work") は、work というフォルダのパスを表します。
この時点では、まだフォルダを作っているわけではありません。
あくまで「この場所を使います」というパスの値を作っています。

文字列で "work/reports" のように書くこともできますが、Path を使うと後からフォルダ名やファイル名をつなげやすくなります。
WindowsやmacOS、Linuxでパスの区切り文字が違うことも、通常は Path 側が扱ってくれます。

2. フォルダとファイル名をつなげます

report_dir = base_dir / "reports"
report_path = report_dir / file_name

Path では、/ を使ってパスをつなげられます。
base_dir / "reports" は、work フォルダの下にある reports フォルダを表します。

この書き方は、文字列の足し算よりも読みやすくなります。
"work" + "/" + "reports" のような書き方では、区切り文字を自分で気にする必要がありますが、Path ならパスを組み立てていることがはっきりします。

3. フォルダを作ってファイルを書き込みます

report_dir.mkdir(parents=True, exist_ok=True)
report_path.write_text("\n".join(lines), encoding="utf-8")

mkdir() はフォルダを作るメソッドです。
parents=True を付けると、途中のフォルダがない場合もまとめて作れます。
exist_ok=True を付けると、すでにフォルダがあってもエラーにしません。

write_text() は、テキストをファイルに書き込むメソッドです。
ここでは文字化けを避けるために、encoding="utf-8" を明示しています。
日本語を含むファイルでは、文字コードを明示しておくと環境差によるトラブルを減らせます。

4. 条件に合うファイルを探します

return sorted(folder.glob("*.txt"))

glob("*.txt") は、指定したフォルダ内から .txt で終わるファイルを探します。
戻り値は Path の集まりなので、見つかったファイルに対して path.namepath.read_text() のような操作を続けられます。

ファイル名だけを表示したい場合は path.name を使います。
フォルダを含むパス全体を表示したい場合は、そのまま path を表示できます。

実務で使うときのポイント

実務では、pathlib はファイルを扱う自動化処理でよく使います。
たとえば、日次レポートを保存する、CSVを読み込む、出力フォルダを作る、ログファイルを探す、といった処理です。

パスを関数に渡すときは、最初から Path として扱うと処理が安定します。
文字列で受け取った場合も、関数の入口で Path(value) に変換しておくと、その後の処理を統一しやすくなります。

第3章で学んだファイル操作と組み合わせると、pathlib の便利さが分かりやすくなります。
第6章では、osshutil も扱いますが、まずはパス操作の基本として pathlib に慣れておくと、後の標準ライブラリも読みやすくなります。

よくある勘違い・注意点

  • Path("work") と書いただけでは、実際のフォルダは作成されません
  • / は割り算ではなく、Path 同士や Path と文字列をつなぐ書き方として使えます
  • ファイルを書き込む前に、保存先フォルダがあるか確認する必要があります
  • 日本語を含むファイルでは、encoding="utf-8" を明示すると扱いやすくなります

まとめ

  • pathlib は、ファイルやフォルダのパスを扱うための標準ライブラリです
  • Path を使うと、パスの組み立てや存在確認、ファイル検索を読みやすく書けます
  • / 演算子を使うと、フォルダ名とファイル名を自然につなげられます
  • 実務では、レポート出力やファイル整理などの自動化処理で特に役立ちます