😊

パスを扱う時はpathlibモジュールを使おう ~os.pathからの脱却~

2023/06/14に公開

はじめに

最近先輩から、「パスを扱う時はos.pathじゃなく、pathlibを使え」とのご指導がありました。何で?と思ったのでpathlibについてしっかり調べてみました。

pathlibとは

pathlibはPython 3.4以降で利用可能な標準ライブラリで、ファイルシステムのパスをオブジェクト指向の形式で操作するためのモジュールです。

pathlibのメリット

osos.pathモジュールと比較して、以下のようなメリットがあります。

  1. オブジェクト指向: pathlibはパスをオブジェクトとして扱うため、メソッドチェインや属性アクセスが容易です。これに対して、osos.pathモジュールはパスを文字列として扱うため、これらの操作が困難です。
  2. 演算子オーバーロード: pathlibでは/演算子がオーバーロードされていて、パスの結合を直感的に行えます。これに対して、os.path.joinは引数の形式により結果が変わる可能性があります。
  3. 統一性: pathlibはWindowsとUnixの両方のパス形式を同じ方法で扱うことができます。osos.pathモジュールでは、これらの形式を区別する必要があります。
  4. 便利なメソッドと属性: pathlibはパスの存在確認、ファイルの作成・削除、親ディレクトリの取得、ファイル名の取得など、多くの便利なメソッドと属性を提供しています。これに対して、osos.pathモジュールでは、これらの操作にそれぞれ異なる関数を呼び出す必要があります。
  5. より良いエラーメッセージ: 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