【Python】フォルダ・ファイル探索に便利なライブラリ「Pathlib」
はじめに
この記事では、Pythonの「Pathlib」というライブラリについて紹介します。Pathlibは標準ライブラリで、パスを扱うモジュールです。
パスを扱うモジュールで他に有名なものとして、 osモジュールやglobモジュールがありますが、これらをimportしなくてもpathlibモジュールだけでパスに関する諸々の操作ができます。
次のようなフォルダができているとして、基本的な使い方を紹介します。
基本的な使い方
準備
まずはモジュールをimportします。
from pathlib import Path
次にパスを示す文字列を引数にPathオブジェクトを作ります。
dir_path = Path("test_folder")
Pathオブジェクトには便利な機能が備えてあります。
以降、このPathオブジェクトを使って各機能を紹介していきます。
ファイル探索
globで条件を満たすフォルダやファイルを列挙します。
path_list = sorted(dir_path.glob("*/*.txt")) # 条件を満たすパス一覧
「*」はあらゆる文字列を示し、/はフォルダ階層の区切りを示します。
上記の例は、dir_path (test_folder)の中の、何らかのフォルダの中に入っている、末尾が「.txt」で終わるファイルorフォルダをすべて列挙する形になります。
また、sortedでくくることで、リストに変換&昇順ソートしています。
結果はこのようになります。
[PosixPath('test_folder/folder_a/text_0.txt'),
PosixPath('test_folder/folder_a/text_1.txt'),
PosixPath('test_folder/folder_a/text_2.txt')]
なお、「**/*」でそのフォルダ配下のすべてのフォルダ・ファイルを末端の階層まで探索することができます。「**」を使うことで、すべての階層のフォルダが探索される形です。
# 例
list(dir_path.glob("**/*"))
なお、参考までにglobモジュールで同じことやろうとすると次のようになります。
glob.glob('**/*', recursive=True)
親フォルダの取得
path_list[0].parent # 親フォルダの取得
結果
PosixPath('test_folder/folder_a')
パスの連結
Pathオブジェクトは、/(スラッシュ)でパスを連結することができます。
スラッシュの左側はPathオブジェクトである必要がありますが、右側は文字列でもPathオブジェクトでもどちらでも大丈夫です。
path_b = Path("test_folder")/"folder_b" # スラッシュでパスの連結が可能
path_b
PosixPath('test_folder/folder_b')
フォルダの作成
mkdirで、そのパスのフォルダが作成されます
path_b.mkdir() # フォルダ作成
パスの存在を確認
existsでそのパスがフォルダやファイルとして実際に存在するかを確認できます。存在する場合True、存在しない場合Falseを返します
path_b.exists() # パスの存在を確認
先ほど作成したので結果はTrueです
True
おわりに
今回紹介した以外にも、パスに関してこういう情報がとりたいな、と思ったことはたいてい属性やメソッドとして取得できるようになっています。
ぜひ調べて使ってみてください!