pathlibとは
Python 3.4以上で推奨されているファイル・パス操作のモジュール。 os.path の代替となるモジュール。
使い方をよく忘れるので備忘録です。
返り値はPathオブジェクトなので、文字列に変換したかったらstr()で囲んでやります。
カレントファイルの絶対パス
from pathlib import Path this_file = Path(__file__).resolve() print(str(this_file)) # C:\Users\XXXX\workspace\project\hoge.py
親ディレクトリの取得
this_file.parents[0] # C:\Users\XXXX\workspace\project this_file.parents[1] # C:\Users\XXXX\workspace\
パス結合
PROJECT_HOME = this_file.parents[0] Path(PROJECT_HOME).joinpath("aaa", "bbb", "ccc", "ddd") # C:\Users\XXXX\workspace\project\aaa\bbb\ccc\ddd
特定ディレクトリ下のファイルの検索
以下のようなフォルダ構成になっているとする
project +--- aaa L aaa.txt + --- bbb L bbb.txt + --- ccc L ccc.txt + --- README.txt
folders = Path(PROJECT_HOME).glob("*") for folder in folders: print(folder) """ WindowsPath('C:/Users/XXXX/workspace/project/aaa') WindowsPath('C:/Users/XXXX/workspace/project/bbb') WindowsPath('C:/Users/XXXX/workspace/project/ccc') WindowsPath('C:/Users/XXXX/workspace/project/README.txt') """
folders = Path(PROJECT_HOME).glob("*") for folder in folders: # フォルダでないならスキップ if not folder.is_dir(): continue print(folder) """ WindowsPath('C:/Users/XXXX/workspace/project/aaa') WindowsPath('C:/Users/XXXX/workspace/project/bbb') WindowsPath('C:/Users/XXXX/workspace/project/ccc') """
特定ディレクトリ下のファイルの再帰的な検索
files = Path(PROJECT_HOME).rglob("*.txt") for f in files: print(f) """ WindowsPath('C:/Users/XXXX/workspace/project/aaa/aaa.txt') WindowsPath('C:/Users/XXXX/workspace/project/bbb/bbb.txt') WindowsPath('C:/Users/XXXX/workspace/project/ccc/ccc.txt') WindowsPath('C:/Users/XXXX/workspace/project/README.txt') """
ファイルの削除
files = Path(PROJECT_HOME).rglob("*.txt") for f in files: f.unlink()
フォルダの削除
for folder in folders: # フォルダを削除する folder.rmdir()
フォルダの中身が空じゃない場合、エラーが発生するので注意。
フォルダの中身があっても削除したい場合は、shutil.rmtree()
を使ったほうが良い。
import shutil for folder in folders: # フォルダが空じゃなくても削除する(folderも削除される) shutil.rmtree(folder)