本記事は、過去に他のブログで書いたものを引っ越ししてきた記事になります。
Pythonでファイル操作を行うのに便利な、pathlibモジュールとPathオブジェクトについて、よく利用する操作を自分用にまとめました。必要に応じて追記していきます。
pathlibについて
pathlibはPython3.4から追加されたモジュールで、ファイルやディレクトリを操作するために便利な機能を提供しています。
それ以前のバージョンでは、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'))