pathlibを始める — オブジェクト指向のパス処理
Pythonを使っていると、ファイルパスやディレクトリを扱うことは非常に一般的です。ログを保存したり、設定ファイルを読み書きしたり、データファイルを整理したりするなど、日常的な作業です。これらの作業は、以前は os.path
や glob
、shutil
などのモジュールを混ぜて使って処理していましたが、もうその必要はありません。なぜでしょうか?
pathlib
があるからです。
pathlibとは何か?
pathlib
は Python 3.4 から登場した パス処理専用のオブジェクト指向モジュール です。従来はファイルパスを単なる文字列として扱っていましたが、 pathlib
は「パスそのもの」を一つのオブジェクトとして扱います。そのおかげで、パスを結合したり、存在を確認したり、ファイルを読み書きする作業がはるかに 明確で読みやすい文法 へと変わりました。
from pathlib import Path
▶ この Path
クラスは、自動的にあなたのオペレーティングシステムに合わせて PosixPath
(macOS/Linux)または WindowsPath
として動作します。あなたがどのOSを使っていても心配する必要はありません!
pathlibの必須機能と例
1. パスオブジェクトの生成
p = Path('data/example.txt')
print(p.resolve()) # 絶対パスを返す
文字列のように見えますが、これはオブジェクトです。さまざまなメソッドと属性を使って、パスを柔軟に扱うことができます。
2. パスの結合: /
演算子の使用
data_dir = Path('data')
file_path = data_dir / 'sample.txt'
スラッシュ演算子 /
でパスを結合できるのは非常にPythonicです。文字列の足し算よりも可読性と安定性が高いです。
3. パス情報の抽出
親ディレクトリ、名前、拡張子など、パスの構成要素を分離できるのも非常に便利です。
p = Path('data/sample.txt')
print(p.parent) # data
print(p.name) # sample.txt
print(p.stem) # sample
print(p.suffix) # .txt
4. 存在確認
結果をブーリアンで返します。
p.exists() # 存在確認
p.is_file() # ファイルか?
p.is_dir() # ディレクトリか?
5. ディレクトリの作成
p = Path('logs/2025/05')
p.mkdir(parents=True, exist_ok=True)
ネストされたディレクトリも一度に作成でき、既に存在していてもエラーなしで処理されます。
6. ファイルの読み書き
p = Path('output.txt')
p.write_text("こんにちは、世界!")
text = p.read_text()
print(text)
バイナリファイルも扱えます:
p.write_bytes(b'binary data')
data = p.read_bytes()
7. ファイル/ディレクトリ検索
print(list(Path('.').glob('*.py'))) # 現在のフォルダの .py ファイルリスト
print(list(Path('.').rglob('*.py'))) # サブフォルダまで再帰探索
glob()
はジェネレーターを返すため、リストに変換して確認するのが良いでしょう。
8. ファイルの削除、移動、名前変更
p.unlink() # 削除
p.rename('newname') # 名前変更(同じディレクトリ内で)
p.replace('newpath') # 移動および上書き
rename()
は対象パスが存在する場合失敗することがあるので、上書きが必要な場合はreplace()
を使用してください。コピー作業にはshutil.copy()
を使う必要があります。
os.path vs pathlibの比較
# os.path
import os
os.path.exists('foo/bar.txt')
# pathlib
Path('foo/bar.txt').exists()
- コードがずっと読みやすくなり、可読性も向上しました。
- 特にLinux環境でよく使われる
cd
、ls
、mkdir
に似た文法構造で親しみやすいです。
なぜpathlibを使うべきか?
- 文字列の代わりに Pathオブジェクトを使うことで構造的なコードが実現します。
- オペレーティングシステムに依存しないパス処理(Windows vs POSIX)
os.path
、glob
、shutil
の機能を一つに統合- テストコード、ロギング、エラーハンドリングなどでも メンテナンス性の向上
まとめ
Counter
や defaultdict
がコレクションを扱うのをよりエレガントにするように、 pathlib
はファイルパスを扱う方法を完全に変えます。文字列処理に苦労していた昔の時代は、もう忘れても構いません。この文章で示した例を一つ一つ実行してみてください。思ったよりも早く慣れることでしょう。
次回は shutil
を使って実際のファイルのコピー/バックアップを自動化する高度な活用法を取り扱う予定です。期待してください!
前の記事が気になる方は、下のリンクをクリックして確認できます。
Add a New Comment