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('.'))
>>> os.fspath(1)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: expected str, bytes or os.PathLike object, not int