Pythonでファイルを扱おうとしたとき、最初にぶつかりやすいのがファイルパスです。 画像を読み込みたい、CSVを保存したい。そんな場面で、どこにあるファイルをどう指定すればよいのか迷ったことはありませんか。
そこで役に立つのがPython標準ライブラリのpathlibです。 pathlibを使うと、ファイルやフォルダの場所を文字列ではなく、Pathというオブジェクトとして扱えるようになります。
難しそうに聞こえるかもしれませんが、考え方はとてもシンプルです。 ファイルパスを安全に、読みやすく、Pythonらしく操作するための道具だと思ってください。
この記事では、IT初心者やPython学習者向けに、pathlibの基本から実用例までをやさしく解説します。
pathlibとは?¶
pathlibは、Pythonでファイルパスを扱うための標準ライブラリです。 標準ライブラリなので、追加インストールは必要ありません。
ファイルパスとは、ファイルやフォルダがどこにあるかを表す住所のようなものです。 たとえば次のようなものがファイルパスです。
C:\Users\taro\Documents\memo.txt
/Users/taro/Documents/memo.txt
Windowsではバックスラッシュ、MacやLinuxではスラッシュが使われることが多いです。 この違いが、初心者にとってややこしいポイントになります。
pathlibを使うと、こうしたOSごとの差をあまり意識せずにパスを組み立てられます。 文字列を手作業でつなげるより、コードの見た目もかなり読みやすくなります。
from pathlib import Path
path = Path("data") / "sample.txt"
print(path)
このように、/ を使ってフォルダ名やファイル名をつなげられます。
最初は少し不思議に見えるかもしれませんが、慣れると文字列結合よりずっと自然に感じます。
なぜpathlibを使うのか¶
Pythonでは昔からos.pathという仕組みでもファイルパスを扱えます。
それでも、最近のPythonコードではpathlibがよく使われます。
理由は、pathlibのほうが処理の意味を読み取りやすいからです。 たとえば、ファイル名を取り出す、拡張子を調べる、親フォルダを取得する、といった操作をPathオブジェクトの機能として書けます。
実務でも同じです。 私が新人エンジニアのコードレビューをしてきた中で、ファイルパスの文字列結合が原因の小さなバグは何度も見てきました。
pathlibでまず覚えたいPath¶
pathlibで最初に覚えるべきものはPathです。
基本的には、from pathlib import Path と書いて使います。
from pathlib import Path
path = Path("data/sample.txt")
print(path)
このpathは、ただの文字列ではありません。
ファイルパスを表すPathオブジェクトです。
Pathオブジェクトには、ファイル名を取得したり、拡張子を調べたり、ファイルが存在するか確認したりする機能があります。
そのため、パスに関する処理をひとまとまりで扱いやすくなります。
Pathと文字列の違い¶
初心者が最初に混乱しやすいのは、Pathと文字列の違いです。 見た目は似ていますが、できることが違います。
from pathlib import Path
path = Path("data/sample.txt")
print(path.name)
print(path.suffix)
print(path.parent)
実行すると、ファイル名、拡張子、親フォルダを取り出せます。 文字列だけで同じことをしようとすると、分割や置換を自分で考える必要があります。
ここがpathlibの大きなメリットです。 パスを単なる文字ではなく、意味を持った部品として扱えるようになります。
| 書き方 | できること | 初心者へのおすすめ度 |
|---|---|---|
| 文字列のパス | 単純な表示や保存先指定 | 小さなコードなら可 |
| os.path | 昔からあるパス操作 | 既存コードを読むなら必要 |
| pathlib | 現代的で読みやすいパス操作 | 新しく書くならおすすめ |
文字列のパスが悪いわけではありません。 ただ、これからPythonを学ぶなら、最初からpathlibに慣れておくと後が楽です。
パスを組み立てる基本¶
pathlibで特に便利なのが、パスの組み立てです。
フォルダ名とファイル名をつなげるとき、/演算子を使います。
from pathlib import Path
base_dir = Path("data")
file_path = base_dir / "input" / "sales.csv"
print(file_path)
WindowsでもMacでも、Python側が環境に合わせて扱ってくれます。 チーム開発では、この違いが大きく効きます。
現在のフォルダを取得する¶
Pythonスクリプトを実行している場所を知りたいときは、Path.cwd()を使います。
cwdはcurrent working directoryの略です。
from pathlib import Path
current_dir = Path.cwd()
print(current_dir)
現在の作業フォルダを基準に、ファイルの保存先や読み込み先を組み立てることはよくあります。 特に、学習用の小さなツールを作るときに便利です。
ファイル名や拡張子を取り出す¶
pathlibを使うと、ファイルパスから必要な部分を簡単に取り出せます。 ファイル整理や自動化をしたい人には、とてもよく使う機能です。
from pathlib import Path
path = Path("data/report_2026.csv")
print(path.name) # report_2026.csv
print(path.stem) # report_2026
print(path.suffix) # .csv
print(path.parent) # data
nameはファイル名全体、stemは拡張子を除いた名前、suffixは拡張子です。
parentを使うと、ひとつ上のフォルダを取得できます。
| 属性 | 意味 | 例 |
|---|---|---|
| name | ファイル名 | report_2026.csv |
| stem | 拡張子なしの名前 | report_2026 |
| suffix | 拡張子 | .csv |
| parent | 親フォルダ | data |
ファイルやフォルダの存在を確認する¶
ファイルを読み込む前には、そのファイルが本当に存在するか確認したいことがあります。 存在しないファイルを読み込もうとするとエラーになるからです。
from pathlib import Path
path = Path("data/sample.txt")
if path.exists():
print("ファイルまたはフォルダがあります")
else:
print("見つかりません")
ファイルかフォルダかを分けて確認したい場合は、is_file()やis_dir()を使います。
from pathlib import Path
path = Path("data/sample.txt")
if path.is_file():
print("これはファイルです")
if path.is_dir():
print("これはフォルダです")
初心者のうちは、エラーが出てから原因を探すことが多いと思います。 少し慣れてきたら、エラーになりそうな場所を先に確認する書き方も覚えていきましょう。
【関連記事】Pythonのエラー文はどこを読めばいい?初心者向けtracebackの見方
フォルダを作成する¶
ファイルを保存する前に、保存先のフォルダが必要になることがあります。
そのときはmkdir()を使います。
from pathlib import Path
output_dir = Path("output")
output_dir.mkdir(exist_ok=True)
exist_ok=Trueを指定すると、すでにフォルダが存在していてもエラーになりません。
学習中のコードでは、この指定を入れておくと扱いやすいです。
階層の深いフォルダをまとめて作りたい場合は、parents=Trueを使います。
from pathlib import Path
output_dir = Path("output") / "2026" / "06"
output_dir.mkdir(parents=True, exist_ok=True)
このコードでは、output/2026/06というフォルダをまとめて作成できます。
日付ごとにファイルを保存したいときなどに便利です。
ファイルを読み書きする¶
pathlibでは、ファイルパスの操作だけでなく、簡単なファイル読み書きもできます。
小さなテキストファイルを扱うなら、read_text()とwrite_text()が便利です。
from pathlib import Path
path = Path("memo.txt")
path.write_text("Pythonのpathlibを学習中です", encoding="utf-8")
text = path.read_text(encoding="utf-8")
print(text)
文字コードにはencoding="utf-8"を指定しておくと安心です。
日本語を扱う場合、文字化けを避けるためにも意識しておきたいポイントです。
ただし、大きなファイルを少しずつ読みたい場合は、従来どおりopen()を使う場面もあります。
pathlibでもopen()は使えます。
from pathlib import Path
path = Path("memo.txt")
with path.open("r", encoding="utf-8") as f:
for line in f:
print(line.strip())
フォルダ内のファイルを一覧取得する¶
フォルダの中にあるファイルをまとめて処理したい場面は多いです。 たとえば、CSVファイルを全部読み込む、画像ファイルをまとめてリサイズする、ログファイルを順番に確認する、といった作業です。
そのようなときは、glob()を使います。
from pathlib import Path
data_dir = Path("data")
for path in data_dir.glob("*.csv"):
print(path)
*.csvは、拡張子が.csvのファイルを対象にするという意味です。
アスタリスクは、任意の文字列にマッチする記号です。
サブフォルダの中まで含めて探したい場合は、rglob()を使います。
from pathlib import Path
data_dir = Path("data")
for path in data_dir.rglob("*.csv"):
print(path)
rglob()は再帰的に探す機能です。
フォルダの中のフォルダまで見に行くため、ファイル数が多い場合は時間がかかることもあります。
os.pathとの違い¶
pathlibを理解するとき、よく比較されるのがos.pathです。
どちらもファイルパスを扱うための仕組みですが、書き方の考え方が違います。
os.pathは関数にパスを渡して処理します。
一方で、pathlibはPathオブジェクトに対してメソッドや属性を使います。
# os.pathの例
import os
path = "data/sample.txt"
print(os.path.basename(path))
print(os.path.splitext(path)[1])
# pathlibの例
from pathlib import Path
path = Path("data/sample.txt")
print(path.name)
print(path.suffix)
【関連記事】Pythonのモジュールとパッケージの違いとは?フォルダ構成で迷う初心者へ
実務でpathlibを使うと何が嬉しいのか¶
エンジニア歴10年の私の感覚では、pathlibの良さはコードが少し大きくなったときに効いてきます。 短いサンプルコードだけを見ると、文字列でも十分に見えるかもしれません。
でも、実務ではファイルパスを何度も組み立てます。 入力フォルダ、出力フォルダ、一時ファイル、ログファイル、設定ファイルなど、パスが増えていきます。
そのときに文字列連結があちこちにあると、読み間違いや修正漏れが起きやすくなります。 pathlibで統一しておくと、パスに関する処理がコード上で見つけやすくなります。
私が特に便利だと感じるのは、バッチ処理やデータ処理のコードです。 CSVを読み込んで加工し、結果を別フォルダに保存するような処理では、pathlibを使うだけでコードの見通しがかなり良くなります。
初心者がよくハマるポイント¶
pathlibは便利ですが、最初に少しだけ注意したいポイントがあります。 ここを知っておくと、つまずきにくくなります。
Pathは文字列ではない¶
Pathオブジェクトは文字列に見えますが、厳密には文字列ではありません。 多くのライブラリではそのまま渡せますが、古いライブラリでは文字列を求められることがあります。
その場合は、str()で文字列に変換します。
from pathlib import Path
path = Path("data/sample.txt")
path_text = str(path)
print(path_text)
最近のPythonライブラリではPathをそのまま受け取れるものが増えています。 それでも、エラーが出たときは文字列変換を試す価値があります。
相対パスと絶対パスを混同しない¶
ファイルパスには、相対パスと絶対パスがあります。 相対パスは現在の作業フォルダを基準にしたパスで、絶対パスは最初から完全な場所を示すパスです。
from pathlib import Path
relative_path = Path("data/sample.txt")
absolute_path = relative_path.resolve()
print(relative_path)
print(absolute_path)
resolve()を使うと、絶対パスとして確認できます。
ファイルが見つからないときは、まず自分がどのフォルダを基準にしているのか確認しましょう。
【関連記事】Pythonの仮想環境(venv)って何のためにある?プロジェクトごとに混ぜない管理法
pathlibで作る簡単な実用例¶
最後に、pathlibを使った小さな実用例を見てみましょう。
ここでは、dataフォルダ内のテキストファイルを探して、ファイル名と文字数を表示します。
from pathlib import Path
folder = Path("data")
for path in folder.glob("*.txt"):
text = path.read_text(encoding="utf-8")
print(f"{path.name}: {len(text)}文字")
短いコードですが、実用的な要素が入っています。 フォルダを指定し、条件に合うファイルを探し、ファイルを読み込み、結果を表示しています。
このような小さな自動化を積み重ねると、Pythonでできることが一気に増えます。 最初は地味に見えるかもしれませんが、ファイル操作は多くの自動化の土台です。
まとめ¶
pathlibは、Pythonでファイルパスを扱うための便利な標準ライブラリです。 ファイル名や拡張子の取得、パスの組み立て、存在確認、フォルダ作成、ファイル一覧取得などを読みやすく書けます。
初心者のうちは、ファイルパスでつまずくことがよくあります。 でも、pathlibに慣れておくと、WindowsとMacの違いや文字列結合のミスに悩む場面を減らせます。
ファイル整理、CSV処理、Excel自動化などに進みたい人にとって、pathlibは早めに覚えておきたい道具です。 派手ではありませんが、コードの読みやすさと安全性を支えてくれます。
まずはPath("data") / "sample.txt"のような簡単な書き方から試してみてください。
ファイルパスが少し怖いものではなく、Pythonで自然に扱えるものだと感じられるはずです。
ここまでお読みいただきありがとうございました。