Pythonでのパス操作:os.pathとモダンなpathlibの比較

この記事では、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プログラミングではこちらの使用が推奨されます。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

私が勉強したこと、実践したこと、してることを書いているブログです。
主に資産運用について書いていたのですが、
最近はプログラミングに興味があるので、今はそればっかりです。

目次