この記事では、Pythonでファイルパスを操作するための伝統的なos.path
モジュールと、より現代的で推奨されるオブジェクト指向のアプローチを提供するpathlib
モジュールの主要な機能について比較しながら解説します。
絶対パスと相対パスの操作
パスの形式を変換したり、その性質を調べたりする機能です。
os.path
を使う方法 os.path.abspath(path)
はパスを絶対パスに変換し、os.path.isabs(path)
はそのパスが絶対パスかどうかを判定します。os.path.relpath(path, start)
は、start
パスからpath
への相対パスを計算します。
import os
print(f"絶対パスの取得: {os.path.abspath('.')}")
print(f"絶対パスか判定: {os.path.isabs('.')}")
print(f"相対パスの計算: {os.path.relpath('C:\\Windows', 'C:\\')}")
pathlib
を使う方法 pathlib
では、これらの操作はPath
オブジェクトのメソッドとして、より直感的に利用できます。
from pathlib import Path
p = Path('.')
print(f"絶対パスの取得: {p.resolve()}")
print(f"絶対パスか判定: {p.is_absolute()}")
print(f"相対パスの計算: {Path('C:/Windows').relative_to('C:/')}")
パス名の部分を取得する
パス文字列から、ファイル名やディレクトリ名などの部分的な情報を取り出します。
os.path
を使う方法 os.path.dirname(path)
はディレクトリ名を、os.path.basename(path)
はファイル名を返します。os.path.split(path)
はこれらをタプルとして一度に返します。
import os
path = 'C:\\Users\\Default\\document.txt'
print(f"ディレクトリ名: {os.path.dirname(path)}")
print(f"ファイル名: {os.path.basename(path)}")
print(f"分割: {os.path.split(path)}")
pathlib
を使う方法 pathlib
では、これらの情報はPath
オブジェクトの属性として直接アクセスできます。
from pathlib import Path
p = Path('C:/Users/Default/document.txt')
print(f"ディレクトリ名: {p.parent}")
print(f"ファイル名: {p.name}")
print(f"拡張子: {p.suffix}")
print(f"ファイル名(拡張子なし): {p.stem}")
ファイルサイズとフォルダ内容の確認
ファイルやフォルダの情報を取得します。
os.path
を使う方法 os.path.getsize(path)
はファイルのサイズをバイト単位で、os.listdir(path)
はフォルダ内のファイルとフォルダの一覧をリストで返します。
import os
# パスは自身の環境に合わせてください
target_dir = 'C:\\Windows'
print(f"ファイルサイズ: {os.path.getsize(os.path.join(target_dir, 'explorer.exe'))} bytes")
# print(f"フォルダ内容: {os.listdir(target_dir)[:5]}") # 最初の5件を表示
# フォルダ内の合計サイズを計算
# total_size = 0
# for filename in os.listdir(target_dir):
# filepath = os.path.join(target_dir, filename)
# if os.path.isfile(filepath):
# total_size += os.path.getsize(filepath)
# print(f"合計サイズ: {total_size} bytes")
pathlib
を使う方法 pathlib
では、stat().st_size
でファイルサイズを、iterdir()
でフォルダ内容をイテレータとして取得できます。
from pathlib import Path
target_dir = Path('C:/Windows')
print(f"ファイルサイズ: {(target_dir / 'explorer.exe').stat().st_size} bytes")
# total_size = sum(f.stat().st_size for f in target_dir.glob('*') if f.is_file())
# print(f"合計サイズ: {total_size} bytes")
パスの存在を検査する
指定したパスが実際に存在するか、またそれがファイルかフォルダかを検査します。
os.path
を使う方法 os.path.exists(path)
, os.path.isfile(path)
, os.path.isdir(path)
の各関数で判定します。
import os
path = 'C:\\Windows'
print(f"存在するか: {os.path.exists(path)}")
print(f"ファイルか: {os.path.isfile(path)}")
print(f"フォルダか: {os.path.isdir(path)}")
pathlib
を使う方法 pathlib
では、Path
オブジェクトのメソッドとしてシンプルに呼び出せます。
from pathlib import Path
p = Path('C:/Windows')
print(f"存在するか: {p.exists()}")
print(f"ファイルか: {p.is_file()}")
print(f"フォルダか: {p.is_dir()}")
まとめ
os.path
モジュールはファイルパスを操作するための基本的な機能を提供しますが、文字列ベースの操作が中心です。一方、pathlib
モジュールはパスをオブジェクトとして扱うことで、より直感的で読みやすいコードを書くことができ、現代のPythonプログラミングではこちらの使用が推奨されます。