パスを、パス( pathlib.Path )オブジェクトとして利用できます。
パスオブジェクトは、p = Path('input')のように作成します。
引数に指定するパスの文字列は実際に実在しているパス以外も指定できます。
メソッド一覧
・p = Path('input') pathオブジェクトの作成
・p.exisits() pathの存在の確認
・p.is_file() pathがファイルか判別
・p.is_dire() pathがディレクトリか判別
・path / patu pathの結合
・p.open(ファイル名) ファイルを開く
・p.read(ファイル名) ファイルを読み込む
・p.write(テキスト) ファイルに書き込む
・p.mkdir() ディレクトリーの作成
・p.rmdir() ディレクトリーの削除
・パス.resolve() pathを絶対パスへ変換
・p.glob('*') 直下のファイルと子ディレクトリを取得
・p.glob('**/*') 直下の全てのディレクトリーとファイルを取得
・p.glob('*.zip') 拡張子にマッチするファイルを取得(例はZIPfile)
プロパティ一覧
・p.name # ファイル名の取得: test.txt
・p.suffix # 拡張子の取得: .txt
・p.stem # ファイル名の拡張子以外の部分の取得: test
・p.parts)# パスを分解したものの取得: ('input', 'sub', 'test.txt')
・p.parent # 親ディレクトリーの取得: input/sub
①ファイルの存在確認
ファイル名.exisits()
②ファイルかディレクトリーの判別
.is_file ファイルかどうか
.is_dir ディレクトリーかどうか
②pathの結合は/を使う
new_p = p / 'sub' / 'test.txt' # パスの結合
③ディレクトリーの作成
p.mkdir(parents=True, exist_ok=True)
④ディレクトリーの削除
p.rmdir()
⑤絶対パスへの変換
パス.resolve()
this_file = Path(__file__) 既存のファイルのpathを取得できる
data_path = (this_file.parent / "data.csv").resolve()
print(data_path)
https://pyq.jp/quests/lib_pathlib_mk/try/
this_file.parentは、this_fileの存在するディレクトリです。
パス.resolve() を実行すると パスを絶対パスに変換 できます。
この問題では data.csv という相対パスが、 /home/appuser/work/data.csv に変換されます。
⑥ファイルの中身の読み込み
p.read(ファイル名)
p = Path('read.txt')
print('Contents:', p.read_text())
⑦ファイルへの書き込み
p.write_text(テキスト)
p.write_text('TEST')とすることで、パスが表すファイルに文字列('TEST')を書き込みます。ファイルが存在する場合、上書きされます。
自前でopenせずに書き込めます。
⑧ファイルの走査(直下のファイル、ディレクトリーを表示する)
p = Path('input')
print("p.glob('*')")
⑨ファイルの走査⑵(input ディレクトリー以下にあるすべてのファイル、ディレクトリーを表示する)
for p_path in p.glob("*"):
print("- ", p_path)
print("p.glob('**/*')")
⑩拡張子にマッチするファイルを取得する
p.glob('*.zip')とすると、'input/*.zip'にマッチするファイル等のパスを順番に取得します。
⑪ファイルを開く
p.open(…)
open(p, …)の代わりにp.open(…)が使えます(ただし、一部のオプションは利用できません)。
たとえば、下記は同じ処理を2回しています。
# ファイルオープンとファイルの読み込み
with p.open() as f:
print(f.readline())
※f.readline()でファイルを読み込む
ファイルの結合
from pathlib import Path
p2 = Path(".")
p3 = p2 / "dir1" / "dir2" / "sample.txt"
print(p3)