Python
 Computer >> コンピューター >  >> プログラミング >> Python

Pythonのpathlibモジュール徹底解説!オブジェクト指向でファイルパスを操作する方法

pathlibモジュールとは

Pythonのpathlibモジュールは、ファイルシステムのパスをオブジェクト指向のアプローチで扱うための標準ライブラリです。各種OSに応じた適切な機能も提供しており、モジュール内で定義されているクラスは、大きく分けて「純粋パス(pure path)」と「具象パス(concrete path)」の2種類があります。

純粋パスクラスは文字列操作などの計算処理のみを行えますが、具象パスクラスはそれに加えてファイルの読み書きといったI/O操作も実行できます。

pathlibで定義されている主なクラス

No.クラス名と説明
1PurePath
他のすべてのクラスの基底クラス
2Path
PurePathを継承した具象クラス。ファイルシステム上のパスを表します。
3PosixPath
Windows以外のOS向けのPathサブクラス
4WindowsPath
Windowsシステム向けのPathサブクラス
5PurePosixPath
Windows以外のシステム向けのPurePathサブクラス
6PureWindowsPath
Windowsシステム向けのPurePathサブクラス

Pathクラスのインスタンスを生成すると、実行しているOSに応じて自動的にWindowsPathまたはPosixPathのいずれかが返されます。

なお、WindowsPathやPosixPathのオブジェクトを直接生成することも可能ですが、これは実行環境と同じ種類のシステム上でのみ行えます。

Pathオブジェクトの作成方法

Pathオブジェクトを作成するには、次のような構文を使用します。

>>> from pathlib import *
>>> p = Path(".")
>>> type(p)
<class 'pathlib.WindowsPath'>

この例はWindows環境で実行しているため、WindowsPathオブジェクトが生成されています。「.」はカレントディレクトリを表します。

Pathクラスの主なメソッド

absolute() – 絶対パスを取得する

Pathオブジェクトの絶対パス表現を返します。

>>> p.absolute()
WindowsPath('C:/python36')

exists() – パスの存在確認

指定したパスが存在すればTrueを返します。

>>> p = Path("mydir")
>>> p.exists()
False
>>> p = Path("etc")
>>> p.exists()
True

is_dir() – ディレクトリかどうかの判定

パスがディレクトリであればTrueを返します。

>>> p = Path("etc")
>>> p.is_dir()
True
>>> p = Path("test.py")
>>> p.is_dir()
False

is_file() – ファイルかどうかの判定

パスがファイルに対応していればTrueを返します。

>>> p = Path("tmp.py")
>>> p.is_file()
True
>>> p = Path("etc")
>>> p.is_file()
False

iterdir() – ディレクトリ内の一覧を取得する

パスが指すディレクトリ内のファイル名を順にyieldするジェネレータを返します。

>>> p = Path("libs")
>>> for f in p.iterdir():
...     print(f)
libs\libpython36.a
libs\python3.lib
libs\python36.lib
libs\_tkinter.lib

mkdir() – 新しいディレクトリを作成する

パスに対応するディレクトリが存在しない場合に新規作成します。すでに存在する場合はFileExistsErrorが発生します。

>>> p = Path("mydir")
>>> p.mkdir()
>>> p.absolute()
WindowsPath('C:/python36/mydir')
>>> p = Path("codes")
>>> p.mkdir()
FileExistsError: [WinError 183] Cannot create a file when that file already exists: 'codes'

open() – ファイルを開く

Pathオブジェクトが表すファイルを開き、ファイルオブジェクトを返します。組み込みのopen()関数と同様の動作です。

>>> p = Path("Hello.py")
>>> f = p.open()
>>> f.readline()
'Hello Python'

read_bytes() – バイナリデータを読み込む

ファイルをバイナリモードで開き、データを読み取った後、自動的に閉じます。

>>> p = Path("Hello.py")
>>> p.read_bytes()
b'Hello Python'

read_text() – テキストを読み込む

ファイルをテキストモードで開いて内容を読み取り、読み終えたら自動的に閉じます。

>>> p = Path("Hello.py")
>>> p.read_text()
'Hello Python'

write_text() – テキストを書き込む

ファイルを開いてテキストを書き込み、その後自動的に閉じます。戻り値は書き込んだ文字数です。

>>> p = Path("Hello.py")
>>> p.write_text("Hello how are you?")
18

write_bytes() – バイナリデータを書き込む

ファイルにバイナリデータを書き込み、その後自動的に閉じます。

>>> p = Path("Hello.py")
>>> p.write_bytes(b'I am fine')
9

stat() – パスの情報を取得する

パスに関する詳細情報(サイズ、タイムスタンプなど)を返します。

>>> p.stat()
os.stat_result(st_mode=16895, st_ino=9570149208167477, st_dev=1526259762, st_nlink=1, st_uid=0, st_gid=0, st_size=0, st_atime=1543085915, st_mtime=1543085915, st_ctime=1543085915)

rmdir() – ディレクトリを削除する

Pathオブジェクトに対応するディレクトリを削除します。

>>> p = Path("mydir")
>>> p.rmdir()

Path.cwd() – カレントワーキングディレクトリを取得する

Pathクラスのクラスメソッドで、現在の作業ディレクトリへのパスを返します。

>>> Path.cwd()
WindowsPath('C:/python36')

Path.home() – ホームディレクトリを取得する

Pathクラスのクラスメソッドで、ユーザーのホームディレクトリへのパスを返します。

>>> Path.home()
WindowsPath('C:/Users/acer')

「/」演算子でパスを結合する

pathlibでは、「/」演算子を使って直感的にパスを構築できます。文字列連結によるミスを防ぎ、OS間の差異も自動的に吸収してくれるのが大きなメリットです。

>>> p = Path(".")
>>> p1 = p / 'codes'
>>> p1.absolute()
WindowsPath('C:/python36/codes')

まとめ

本記事では、pathlibモジュールで定義された、ファイルシステムを操作するためのオブジェクト指向APIについて学びました。Pathクラスの各メソッドを活用することで、osモジュールや文字列連結に頼る従来の方法よりも、可読性が高く安全なパス操作が可能になります。日常的なファイル操作コードにぜひ取り入れてみてください。

  1. Pythonで最小コストパスを求める方法|動的計画法による実装を徹底解説

    本記事では、以下の問題文に対する解決策について詳しく解説します。 問題文 コスト行列と目標位置 (m, n) が与えられたとき、開始地点 (0, 0) から (m, n) まで移動するための最小コストパスのコストを求めます。行列の各セルには、そのセルを通過する際にかかるコストが設定されており、移動は「右」「下」「右下」のいずれかの方向に進むことができます。 それでは、実際の実装を見ながら解決策を確認していきましょう。 実装例 # 動的計画法によるアプローチ R = 3 C = 3 def minCost(cost, m, n): # 初期化 tc = [[0 for x in

  2. Pythonにパスを追加する方法|Windowsの環境変数設定でエラーを解消する手順

    Pythonとは? Pythonは1991年に初めてリリースされたプログラミング言語です。WindowsやmacOS、Linuxなど複数のOSで動作し、開発者はさまざまな用途のコードを記述・開発できます。Web開発、データ分析、AI・機械学習など幅広い分野で活用されており、その柔軟性と充実したサポート体制から、世界で最も広く使われているプログラミング言語のひとつとなっています。 コマンドプロンプトでpythonが認識されない原因 コマンドプロンプトで「python」と入力してもエラーが返され、正しく動作させるには毎回フルパスを指定しなければならないことがあります。これは、コマンドプロンプトが