添加链接
link管理
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

ファイルシステム パス プロトコル

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