趣味の開発ノート

ITの学習やプログラミング・ノーコードアプリ開発のことなど。

【Python】ファイル操作 - pathlibとPathオブジェクト

本記事は、過去に他のブログで書いたものを引っ越ししてきた記事になります。

Pythonでファイル操作を行うのに便利な、pathlibモジュールとPathオブジェクトについて、よく利用する操作を自分用にまとめました。必要に応じて追記していきます。

pathlibについて

pathlibはPython3.4から追加されたモジュールで、ファイルやディレクトリを操作するために便利な機能を提供しています。

docs.python.org

それ以前のバージョンでは、os.pathを使うのが一般的でした。公式ドキュメントにもosモジュールとの対応表がまとめられています。

Pathオブジェクトを生成する

ファイルやフォルダのパスをオブジェクトとして扱うには、Pathクラスを使います。

pathlib.Path(パス)と記述することで、Pathオブジェクトを生成します。このパスには絶対パス相対パスのどちらでも使用できます。また、複数の部分パスを指定することもできます。

パスオブジェクト同士は/演算子を使って結合することができます。

from pathlib import Path

p_cur = Path('.') # カレントディレクトリのPathオブジェクトを生成

p = Path(r'/Users/xxx/Desktop/image.png') # 絶対パスでPathオブジェクトを生成
p_dir = Path('folder') # 相対パスでPathオブジェクトを生成
p_txtfile = Path('documents', 'file.txt') # 複数の部分パスからPathオブジェクトを生成

print(type(p), p)
print(p_dir / p_txtfile) # Pathオブジェクトの結合
<実行ログ>
<class 'pathlib.PosixPath'> /Users/xxx/Desktop/image.png
folder/documents/file.txt

Pathオブジェクトの属性

カレントディレクトリを調べる

現在操作しているディレクトリを調べる時は、Path.cwd()を使います。新しいPathオブジェクトを返します。

このcwd()メソッドはクラスメソッドのため、インスタンスを生成せずに使用します。

パスの存在確認

パスが存在しているかどうかを確認する時は、Pathオブジェクトのexists()メソッドを使います。

パスがディレクトリなのかファイルなのかを調べる時は、is_dir(), is_file()メソッドをそれぞれ使います。

p = Path('sample.txt')

print(p.exists()) # True
print(p.is_dir()) # False
pritn(p.is_file()) #True

パスの情報

Pathオブジェクトの親ディレクトリのパスは、Pathオブジェクトのparent属性で調べることができます。

ファイル名はname属性、拡張子はsuffix属性でそれぞれ文字列で得られます。

p = Path('sample.txt')

print(p.parent)
print(p.name)
pritn(p.suffix)

パスの一覧を取得するメソッド

iterdir()メソッドは、Pathオブジェクトが表すディレクトリ内のPathオブジェクト一覧を調べ、そのジェネレータを返します。

glob()メソッドは、Pathオブジェクトが表すディレクトリ内の文字列パターンにマッチしたPathオブジェクト一覧を調べ、そのジェネレータを返します。

文字列パターン

正規表現と同様に[0-9]b(o|a)b)などのようなパターンも使えます。

書式 意味
** Pathオブジェクト自身とそのサブフォルダ全てを再帰的に操作
* 長さ0以上の任意の文字列
? 任意の1文字
[] 特定の1文字
sorted(Path('.').glob('*/*.py'))
sorted(Path('.').glob('**/*.py'))

参考

docs.python.org