Python 3.6の概要 (その5 - ファイルシステムパス プロトコル)
ファイルシステムパス プロトコル
pathlib はPython3.4で導入されたが、pathlib
で表現されるファイルパスは、 open()
やos.path.*
などの、既存のファイル操作関連関数では使用できないため、あまり便利には使えていなかった。
Python3.6からは、pathlib.Path
などのファイルパスをあらわすオブジェクトに特殊メソッド __fspath__()
が実装された。ファイル名を引数として受け取る、open()
などの関数は、__fspath__()
を呼び出して、ファイルパスを取得するように変更された。
>>> import pathlib >>> spam = pathlib.Path('./spam') >>> spam.__fspath__() 'spam' >>> open(spam, 'w') <_io.TextIOWrapper name='spam' mode='w' encoding='UTF-8'>
また、オブジェクトからファイルパスを取得する関数として、os.fspath()が追加された。os.fspath(path)
は、path
が文字列またはバイト列ならそのまま、それ以外ならpath.__fspath__()
を呼び出して戻り値とする。
>>> import os, pathlib >>> os.fspath('.') # 文字列はそのまま '.' >>> os.fspath(pathlib.Path('.')) # __fspath__()メソッドがあれば呼び出す '.' >>> os.fspath(1) # 以外ならエラー Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: expected str, bytes or os.PathLike object, not int