🐍 Pythonの「パス操作」でつまずいていませんか?
Pythonでアプリやスクリプトを書き始めると、ほぼ必ず登場するのが「フォルダやファイルのパス操作」です。設定ファイルを読み込んだり、ログを書き出したり、画像をまとめてリネームしたり…日々の自動化には欠かせない処理ですよね。
ところがPythonには os・glob・pathlib と 3つの標準モジュール が用意されていて、初心者ほど「どれを使えばいいの?」と迷ってしまいがちです。本稿では、現代のPythonでもっともおすすめされる pathlib を中心に、パス操作の基本からディレクトリの再帰取得、ファイル作成・削除までを一気に整理します。読み終える頃には、あなたのコードがぐっとシンプルで読みやすくなっているはずです✨
📁 そもそも「パス」って何?基礎用語をサクッと整理
本題に入る前に、混乱しがちな用語をすり合わせておきましょう。
- ファイル / ディレクトリ(フォルダ):一般的な意味そのまま。本稿では「ディレクトリ」で統一します。
- サブディレクトリ:ディレクトリの中にあるディレクトリのこと。
- パス:コンピューター上でファイルやディレクトリの位置を表す文字列。
- 絶対パス(フルパス):ルート(Windowsなら
C:\など)から辿った完全なパス。 - 相対パス:ある場所から見たパス。同階層は
./、1つ上は../で表します。 - カレントディレクトリ:今いる場所のディレクトリ。
🧰 Pythonでパスを扱う3つのモジュール
Pythonの標準ライブラリには、パス操作用のモジュールが3種類用意されています。
① os / os.path モジュール
もっとも歴史が長く、パス結合・分割・存在確認など一通りの操作が可能です。ただ os 単体で書くと、関数を入れ子にする必要があり、コードがやや冗長になりがち。
② glob モジュール
ワイルドカード(* や ?)を使ったパターンマッチで、再帰的にディレクトリ内を検索できるモジュールです。os だけだと面倒な「特定拡張子のファイルだけ集める」といった処理が得意。
③ pathlib モジュール(おすすめ ⭐)
Python 3.4で導入された比較的新しいモジュールで、パスをオブジェクトとして扱うのが最大の特徴。公式ドキュメントでも「os.path や glob より高水準」と表記されており、これ一つでパス操作のほぼすべてを賄えます。最初は抽象度の高さに戸惑うかもしれませんが、慣れるとこちらのほうが圧倒的に書きやすく、読みやすいコードになります。
🚀 pathlib の基本的な使い方
パスオブジェクトの作成
まずは from pathlib import Path でインポート。あとは対象ディレクトリを文字列で渡すだけでパスオブジェクトが作れます。
from pathlib import Path
# カレントディレクトリ
path = Path.cwd()
print(path)
# パスを連結(スラッシュ演算子が使える!)
dir1 = path / "directory1"
print(dir1)
WindowsとMacで内部的なクラスは異なります(WindowsPath / PosixPath)が、利用者は意識せずに同じコードで書けます。
ディレクトリ内のファイル一覧を取得
パス操作で最も頻繁に行うのが「あるディレクトリの中身一覧の取得」です。iterdir() を使えば、その階層にあるファイルとサブディレクトリのパスオブジェクトをジェネレーターで取得できます。
for p in dir1.iterdir():
print(p.name) # ファイル名・ディレクトリ名のみ
print(str(p)) # 文字列としてのフルパス
# リスト内包表記でまとめて取得
names = [p.name for p in dir1.iterdir()]
print()で表示すると文字列のように見えますが、中身はパスオブジェクト。文字列が必要なら str() で変換してあげましょう。
ファイル?ディレクトリ?存在する?
p.is_file():ファイルなら Truep.is_dir():ディレクトリなら Truep.exists():実際に存在しているなら True
再帰的に取得したいなら glob() / rglob()
iterdir() は同じ階層しか取得しません。サブディレクトリの中までまるっと取得したいときは、pathlib の glob() メソッドが便利です。
# 配下のすべてのファイル・ディレクトリを再帰取得
for p in dir1.glob("**/*"):
print(p.name)
# .txt ファイルだけ再帰取得
for p in dir1.glob("**/*.txt"):
print(p.name)
** が「再帰的に任意階層」、* が「0文字以上の任意文字」を意味します。正規表現ともシェルのglobとも少し違うので注意してください。
ファイル・ディレクトリの作成と削除
- ファイル作成:
p.touch()(既存でもエラーにならず、タイムスタンプが更新される) - ファイル削除:
p.unlink()(missing_ok=Trueで存在しなくてもOKに) - ディレクトリ作成:
p.mkdir() - ディレクトリ削除:
p.rmdir()(中身が空でないとエラー)
これだけ覚えれば、日常のパス操作で困ることはほぼありません💪
📚 Python学習を加速させるおすすめアイテム
動画やネット記事でPythonを学んでいる方は多いと思いますが、「体系的に手元で見返せる教材」や「快適な学習環境」を整えると、理解度と継続率が一気に変わります。ここでは、pathlibのような標準ライブラリの使いこなしを身につけたい方におすすめのアイテムを厳選しました。
📖 体系的に学べるPython入門書
ファイル操作・自動化の定番書。pathlibやglobを使った実例が豊富で、本稿の内容を実務レベルに引き上げてくれます。
🐍 中級者へのステップアップに
言語仕様だけでなく「現場で通用するコードの書き方」が学べる一冊。pathlibのようなモダンな書き方の意義が腹落ちします。
⌨️ 長時間コーディングを支えるキーボード
静かな打鍵感とバックライト付きで、夜のコーディングも快適。手の疲れを軽減してくれるので、写経学習が捗ります。
🖱️ 多ボタンマウスで作業効率アップ
横スクロールやジェスチャー操作で、ターミナルとエディタの行き来がスムーズに。ファイル整理を自動化するスクリプトを書きながら使うとその快適さが分かります。
🖥️ ノートPC作業を底上げするモニター
ターミナル・エディタ・ブラウザを並べて表示できる4Kモニターは、学習効率を一段引き上げる投資。USB-C一本で接続できるモデルなら机もスッキリします。
❓ よくある質問(FAQ)
🤔 os.path と pathlib、どっちを覚えればいい?
これからPythonを学ぶ方ならpathlib優先で問題ありません。公式も高水準モジュールとして推奨しており、コードがオブジェクト指向で読みやすくなります。古いコードベースを読むときに os.path の知識があると安心、というイメージで大丈夫です。
📂 pathlib は古いPythonでも使える?
pathlibはPython 3.4で導入されました。それより古い環境では使えないため、利用前に python --version でバージョンを確認しましょう。現行の3.x系であればまず問題ありません。
🔁 「再帰的に取得」って具体的にどういう意味?
指定したディレクトリの中だけでなく、その下のサブディレクトリ、さらにその中…と入れ子の階層もまるごと取得することです。glob("**/*") や rglob("*") を使えば一発で実現できます。
🪟 WindowsとMacでコードを書き分ける必要はある?
pathlibを使う場合、基本的に書き分けは不要です。内部的には WindowsPath や PosixPath が自動で選ばれるため、同じコードでクロスプラットフォーム対応ができます。
📝 リスト内包表記がややこしいのですが…
慣れるまでは1ステップずつ変数に代入する書き方で構いません。動作を理解してから、[p.name for p in dir1.iterdir()] のような1行スタイルに段階的に置き換えていくのがおすすめです。
✨ まとめ:pathlibを味方にすればPythonがもっと楽しくなる
Pythonのパス操作は、最初こそ「3つもモジュールがあって難しそう」と感じますが、まずは pathlib を中心に押さえれば十分です。パスオブジェクトの作成、iterdir() による一覧取得、glob() での再帰検索、そして作成・削除メソッド。この流れさえ手になじめば、日々のファイル整理やデータ前処理が驚くほど短いコードで書けるようになります。
動画や本で得た知識は、実際に手を動かしてこそ定着するもの。お気に入りの書籍とキーボード、そしてサブモニターを揃えて、自分専用の「学習が続く環境」を整えてみてください。気づけばあなたも、ターミナルでスッとスクリプトを書ける一人前のPythonユーザーになっているはずです🚀


















































コメント