😊
パスを扱う時はpathlibモジュールを使おう ~os.pathからの脱却~
はじめに
最近先輩から、「パスを扱う時はos.pathじゃなく、pathlibを使え」とのご指導がありました。何で?と思ったのでpathlibについてしっかり調べてみました。
pathlibとは
pathlib
はPython 3.4以降で利用可能な標準ライブラリで、ファイルシステムのパスをオブジェクト指向の形式で操作するためのモジュールです。
pathlibのメリット
os
とos.path
モジュールと比較して、以下のようなメリットがあります。
-
オブジェクト指向:
pathlib
はパスをオブジェクトとして扱うため、メソッドチェインや属性アクセスが容易です。これに対して、os
やos.path
モジュールはパスを文字列として扱うため、これらの操作が困難です。 -
演算子オーバーロード:
pathlib
では/
演算子がオーバーロードされていて、パスの結合を直感的に行えます。これに対して、os.path.join
は引数の形式により結果が変わる可能性があります。 -
統一性:
pathlib
はWindowsとUnixの両方のパス形式を同じ方法で扱うことができます。os
とos.path
モジュールでは、これらの形式を区別する必要があります。 -
便利なメソッドと属性:
pathlib
はパスの存在確認、ファイルの作成・削除、親ディレクトリの取得、ファイル名の取得など、多くの便利なメソッドと属性を提供しています。これに対して、os
とos.path
モジュールでは、これらの操作にそれぞれ異なる関数を呼び出す必要があります。 -
より良いエラーメッセージ:
pathlib
はエラーメッセージをより明確に表示します。たとえば、存在しないパスにアクセスした場合、os
モジュールは一般的なOSError
を返すのに対して、pathlib
は特定のFileNotFoundError
を返します。
ただし、一部のライブラリはまだpathlib
のパスオブジェクトを直接受け入れない場合もあります。これらの場合は、パスオブジェクトのstr
メソッドを使用してパスを文字列に変換する必要があります。
保存フォルダの作成と指定
Pythonのpathlib
モジュールを使用すると、オブジェクト指向の方法でファイルシステムのパスを操作することができます。具体的な保存フォルダの作成と指定は以下のように行います。
from pathlib import Path
# 保存先のフォルダパスを指定
folder_path = Path("/path/to/your/folder")
# フォルダが存在しない場合、フォルダを作成
folder_path.mkdir(parents=True, exist_ok=True)
# ここでファイルを保存
file_path = folder_path / "your_file.txt"
with file_path.open("w") as f:
f.write("Hello, world!")
このコードでは、Path
オブジェクトを作成して保存先のフォルダを指定し、Path.mkdir
メソッドを使ってフォルダを作成します。parents=True
を指定すると、親ディレクトリが存在しない場合でも必要な全ての親ディレクトリを作成します。exist_ok=True
を指定すると、ディレクトリが既に存在する場合でもエラーを発生させません。
その後、フォルダのパスとファイル名をスラッシュ(/
)を使って連結し、新しいファイルのパスを作成します。Path.open
メソッドを使ってファイルを開き、その中にデータを書き込みます。
このようにpathlib
モジュールを使うと、パスの操作が直感的に行え、コードも読みやすくなるメリットがあります。
Discussion