Pythonのpathlibの今時な使い方
- 作成日: 2021-02-15
- 更新日: 2023-12-24
- カテゴリ: Python
Pythonのpathlibの使い方
プログラミング言語のPythonにはpathlibというモジュールがあります。
pathlibはWindowsやUNIX系のシステムのパスを抽象化して管理することが出来ます。
わずらわしいパス関連の処理をとてもイージーに記述することが出来ます。
この記事では今時なpathlibの使い方をわかりやすく解説します。
具体的には↓を見ていきます。
- 前提とするディレクトリ構成
- Pathの使い方
前提とするディレクトリ構成
今回解説するpathlibはパスを扱いますが、パスのサンプルとして↓のようなディレクトリ構成を用意します。
sample/
├── sub1
│ ├── file1.txt
│ └── file2.txt
└── sub2
├── file3.txt
└── file4.txt
2 directories, 4 files
🦝 < きれいなディレクトリだろ
🐭 < サンプルなんだぜ、これ
Pathの使い方
pathlibの中に入っているPathというクラスを使うとパスを操作することが出来ます。
基本的にはこのPathにパスを渡してPathのメソッドを使用することでパスを操作します。
Pathは純粋パスクラス(PurePath)のサブクラスです。
Pathの初期化
Pathを初期化するには↓のようにします。
from pathlib import Path
p = Path('./sample')
print(type(p))
Windows環境で↑のコードを実行すると↓のように出力されます。
<class 'pathlib.WindowsPath'>
Windows環境では↑のようにWindowsPathが生成されます。
いっぽうUNIX環境ではPosixPathが生成されます。
サブディレクトリの探索
Pathに渡したパスのサブディレクトリの一覧を取得するには↓のようにiterdir()
を使います。
from pathlib import Path
p = Path('./sample')
for path in p.iterdir():
print(path)
print(type(path))
↑のコードを実行すると↓のような結果になります。
sample/sub1
<class 'pathlib.PosixPath'>
sample/sub2
<class 'pathlib.PosixPath'>
↑のようにiterdir()
でサブディレクトリのパスを取得したら、あとはルートのパスと同じようにメソッドを使ってパスに対する操作を行えるということになります。
特定ファイルをまとめて取得
パスのメソッドglob()
を使うと、特定のディレクトリにある特定の拡張子のファイルをまとめて取得することが出来ます。
たとえば↓のようにです。
from pathlib import Path
p = Path('./sample')
paths = p.glob('sub1/*.txt')
for path in paths:
print(path)
↑のコードを実行すると↓のような結果になります。
sample/sub1/file1.txt
sample/sub1/file2.txt
ディレクトリ間の移動
/
でパスを演算するとディレクトリ間を移動することが出来ます。
from pathlib import Path
p = Path('./sample')
print(p)
q = p / 'sub2'
print(q)
↑のコードを実行すると↓のような結果になります。
sample
sample/sub2
注意したいのは↑の記法では存在しないディレクトリにも移動できるという点です。
たとえば↓のコードはエラーになりません。
from pathlib import Path
p = Path('./sample')
print(p)
q = p / 'nothing'
print(q)
絶対パスを得る
パスのメソッドresolve()
を使うと絶対パスを得ることが出来ます。
/path/to/dir/sample
パスが存在するか確認する
パスのメソッドexists()
を使うと、そのパスが存在するかどうか確認することが出来ます。
from pathlib import Path
p = Path('./sample')
print(p.exists())
q = p / 'nothing'
print(q.exists())
↑のコードは↓のような結果になります。
True
False
パスがディレクトリかどうか確認する
パスのメソッドis_dir()
を使うと、そのパスがディレクトリかどうか確認することが出来ます。
from pathlib import Path
p = Path('./sample')
print(p.is_dir())
q = p / 'sub1' / 'file1.txt'
print(q.is_dir())
↑のコードを実行すると↓のような結果になります。
True
False
ファイルかどうか確認するにはis_file()
を使います。
現在のディレクトリを取得する
パスのクラスメソッドcwd()
を使うと現在のパスを取得できます。
from pathlib import Path
print(Path.cwd())
↑のコードを実行すると↓のような結果になります。
/path/to/dir/
ホームディレクトリを取得する
パスのクラスメソッドhome()
を使うとホームディレクトリを取得できます。
from pathlib import Path
print(Path.home())
↑のコードを実行すると↓のような結果になります。
/home/myuser
ファイルのサイズを取得する
ファイルのサイズを取得するにはパスのメソッドstat()
を使い、st_size
を参照します。
from pathlib import Path
p = Path('sample/sub1/file1.txt')
print(p.stat().st_size)
↑のコードを実行すると↓のような結果になります。
128
その他のメソッド
この他にもPathにはいろいろなメソッドがあります。
他のメソッドについては↓を参照してください。
おわりに
今回はpathlibの使い方を見て見ました。
pathlibはパスを抽象化して扱いやすくしてくれます。
ファイルシステム関連のプログラムを作りたい時に重宝しそうなライブラリですね。
🦝 < ファイルシステムを制する者はプログラムを制する
🐭 < 先生、デフラグがしたいです