🐍 Python

PathとOS依存の文字列パス(os.path)の違い

Pythonには古くからあるos.pathモジュール(文字列としてパスを扱う)と、新しいpathlib(オブジェクトとしてパスを扱う)の2つの流儀があります。AIが生成したコードにはどちらのスタイルも登場するため、両者の対応関係を知っておくと読み替えがスムーズになります。

os.path.join("folder", "sub", "file.txt")  # 文字列を返す(旧来のスタイル)
Path("folder") / "sub" / "file.txt"        # Pathオブジェクトを返す(pathlibのスタイル)
import os
from pathlib import Path

joined_ospath = os.path.join("folder", "sub", "file.txt")
print(joined_ospath)
# folder\sub\file.txt

joined_pathlib = str(Path("folder") / "sub" / "file.txt")
print(joined_pathlib)
# folder\sub\file.txt

print(joined_ospath == joined_pathlib)
# True ← 文字列化すれば同じ結果
# OSのパス規則を明示的に指定したい場合はPureWindowsPath/PurePosixPathを使う
from pathlib import PureWindowsPath, PurePosixPath

win_path = PureWindowsPath("folder\\sub\\file.txt")
print(win_path.as_posix())
# folder/sub/file.txt ← Windows形式からスラッシュ区切りに変換

posix_path = PurePosixPath("folder/sub/file.txt")
print(str(posix_path))
# folder/sub/file.txt
用途に応じたクラスの選び方
Path
実行中のOSに応じて自動的にWindowsPath/PosixPathになる。実際のファイルシステム操作(exists・mkdir等)もできる
PureWindowsPath / PurePosixPath
実行中のOSに関わらず、常に指定した規則でパス文字列を組み立てる。ファイルシステムには一切アクセスしない(パス文字列の計算だけ行いたい場合に使う)
💡 AIコードレビュー観点:関数の引数がstrを要求していないか確認する

多くの標準ライブラリ関数(open()など)はPathオブジェクトを直接受け取れ、f文字列やstr.format()に埋め込んだ場合もstr(p)相当の見た目になるため一見困りません。ただし"path: " + pのように+で直接連結しようとするとTypeErrorになりますし、print([p])のようにリストや辞書の中に入れた状態で出力するとWindowsPath('folder/file.txt')のようなrepr形式で表示され、ログが読みにくくなります。AIが生成したコードでPathオブジェクトを文字列結合やログ出力にそのまま使っている場合、これらの挙動差を踏まえてstr(p)で明示的に変換したほうが安全な場面がないか確認しましょう。

← Python pathlib クイックリファレンス一覧へ戻る / Pathの作り方とパス結合 →