"os.path" --- 一般的なパス名操作
********************************

**ソースコード:** Lib/genericpath.py, Lib/posixpath.py (POSIX) 、
Lib/ntpath.py (Windows) 。

======================================================================

このモジュールはパス名を扱う際に便利な関数を実装しています。ファイルの
読み書きをする際は "open()" を、ファイルシステムにアクセスするには
"os" モジュールをご参照ください。パスの引数は文字列、バイト列、あるい
は "os.PathLike" プロトコルを実装するあらゆるオブジェクトとして渡すこ
とができます。

Unix シェルとは異なり、Python はあらゆるパス展開を *自動的には* 行いま
せん。アプリケーションがシェルのようなパス展開を必要とした場合は、
"expanduser()" や "expandvars()" といった関数を明示的に呼び出すことで
行えます。("glob" モジュールも参照してください)

参考: "pathlib" モジュールは高水準のパスオブジェクトを提供します。

注釈:

  以下のすべての関数は、そのパラメータにバイト列のみ、あるいは文字列の
  み受け付けます。パスまたはファイル名を返す場合、返り値は同じ型のオブ
  ジェクトになります。

注釈:

  オペレーティングシステムによってパス名の規則が異なるため、標準ライブ
  ラリにはこのモジュールの複数の版があります。 "os.path" は常に Python
  が動作しているオペレーティングシステムに適したパスモジュールであり、
  ローカルのパスに使えます。 一方、特定の形式のパスを *常に* 扱いたい
  場合は、個々のモジュールをインポートして使うこともできます。 いずれ
  も同じインターフェースを持ちます:

  * UNIX 形式のパスを扱う "posixpath"

  * Windows のパスを扱う "ntpath"

バージョン 3.8 で変更: "exists()"、"lexists()"、"isdir()"、"isfile()"
、"islink()"、"ismount()" は、OS レベルで表現できない文字やバイトを含
むパスに対して、例外を送出する代わりに "False" を返すようになりました
。

os.path.abspath(path)

   パス名 *path* を正規化された絶対パスにして返します。 ほとんどのプラ
   ットフォームでは、"normpath(join(os.getcwd(), path))" の呼び出しと
   同等です。

   Windows ではオペレーティングシステムがパスを正規化するため、結果は
   "normpath(join(os.getcwd(), path))" と異なる場合があります。 ドライ
   ブ相対パスは、指定されたドライブのカレントディレクトリを基準に解決
   され、ドライブレターは大文字になります。 末尾のドットと空白は取り除
   かれます。 例えば、次のようになります。

      >>> os.path.abspath('c:spam')
      'C:\\Temp\\spam'
      >>> os.path.abspath('c:/temp/spam. . .')
      'c:\\temp\\spam'

   参考: "os.path.join()" and "os.path.normpath()".

   バージョン 3.6 で変更: *path-like object* を受け入れるようになりま
   した。

os.path.basename(path, /)

   パス名 *path* の末尾のファイル名部分を返します。これは関数
   "split()" に *path* を渡した時に返されるペアの 2 番めの要素です。こ
   の関数が返すのは Unix の **basename** とは異なります; Unix の
   **basename** は "'/foo/bar/'" に対して "'bar'" を返しますが、関数
   "basename()" は空文字列 ("''") を返します。

   バージョン 3.6 で変更: *path-like object* を受け入れるようになりま
   した。

os.path.commonpath(paths)

   イテラブル *paths* に含まれる各パス名に共通する、最長のサブパスを返
   します。 *paths* に絶対パスと相対パスの両方が含まれる場合、異なるド
   ライブのパスが含まれる場合、または *paths* が空の場合は
   "ValueError" を送出します。 "commonprefix()" と異なり、有効なパスを
   返します。

   Added in version 3.5.

   バージョン 3.6 で変更: *path-like objects* のシーケンスを受け入れる
   ようになりました。

   バージョン 3.13 で変更: シーケンスだけでなく、任意のイテラブルを渡
   せるようになりました。

os.path.commonprefix(list, /)

   *list* 内のすべての文字列に共通する、最長の接頭辞を文字単位で求めて
   返します。 *list* が空の場合は空文字列 ("''") を返します。

   警告:

     この関数は 1 文字ずつ処理するため、無効なパスを返す場合があります
     。 **パスの共通の接頭辞** が必要な場合、この関数が実装するアルゴ
     リズムは安全ではありません。 パスの共通の接頭辞を求めるには
     "commonpath()" を使ってください。

        >>> os.path.commonprefix(['/usr/lib', '/usr/local/lib'])
        '/usr/l'

        >>> os.path.commonpath(['/usr/lib', '/usr/local/lib'])
        '/usr'

   バージョン 3.6 で変更: *path-like object* を受け入れるようになりま
   した。

   バージョン 3.15 で非推奨: パスの接頭辞については
   "os.path.commonpath()" の使用を推奨し、この関数は非推奨になりました
   。 "os.path.commonprefix()" 関数が非推奨となるのは、その名前と所属
   するモジュールが誤解を招くためです。 パス操作のモジュールに含まれて
   いるにもかかわらず、パスの接頭辞を扱う用途には安全ではなく、使うこ
   とで Python プログラムに誤ってパストラバーサルの脆弱性を持ち込みや
   すくなっています。

os.path.dirname(path, /)

   パス名 *path* のディレクトリ名を返します。これは関数 "split()" に
   *path* を渡した時に返されるペアの 1 番めの要素です。

   バージョン 3.6 で変更: *path-like object* を受け入れるようになりま
   した。

os.path.exists(path)

   *path* が実在するパスかオープンしているファイル記述子を参照している
   場合 "True" を返します。壊れたシンボリックリンクについては "False"
   を返します。一部のプラットフォームでは、たとえ *path* が物理的に存
   在していたとしても、要求されたファイルに対する "os.stat()" の実行権
   がなければこの関数が "False" を返すことがあります。

   バージョン 3.3 で変更: *path* は整数でも可能になりました: それがオ
   ープンしているファイル記述子なら "True" が返り、それ以外なら
   "False" が返ります。

   バージョン 3.6 で変更: *path-like object* を受け入れるようになりま
   した。

os.path.lexists(path)

   *path* が存在するパスを指している場合、壊れたシンボリックリンクも含
   めて "True" を返します。 "os.lstat()" のないプラットフォームでは
   "exists()" と同等です。

   バージョン 3.6 で変更: *path-like object* を受け入れるようになりま
   した。

os.path.expanduser(path)

   Unix および Windows では、与えられた引数の先頭のパス要素 "~" 、また
   は "~user" を、 *user* のホームディレクトリのパスに置き換えて返しま
   す。

   Unix では、先頭の "~" は、環境変数 "HOME" が設定されているならその
   値に置き換えられます。設定されていない場合は、現在のユーザのホーム
   ディレクトリをビルトインモジュール "pwd" を使ってパスワードディレク
   トリから探して置き換えます。先頭の "~user" については、直接パスワー
   ドディレクトリから探します。

   Windows では、"USERPROFILE" が設定されていればその値を使い、そうで
   なければ "HOMEPATH" と "HOMEDRIVE" を組み合わせて使います。 先頭の
   "~user" については、現在のユーザーのホームディレクトリの最後の要素
   が "USERNAME" と一致することを確認し、一致すれば置き換えます。

   置き換えに失敗したり、引数のパスがチルダで始まっていなかった場合は
   、パスをそのまま返します。

   バージョン 3.6 で変更: *path-like object* を受け入れるようになりま
   した。

   バージョン 3.8 で変更: Windowsで  "HOME" は参照しなくなりました。

os.path.expandvars(path)

   引数のパスの環境変数を展開して返します。引数の中の "$name" または
   "${name}" のような形式の文字列は環境変数、 *name* の値に置き換えら
   れます。不正な変数名や存在しない変数名の場合には変換されず、そのま
   ま返します。

   Windows では、 "$name" や "${name}" の形式に加えて、 "%name%" の形
   式もサポートされています。

   バージョン 3.6 で変更: *path-like object* を受け入れるようになりま
   した。

os.path.getatime(path, /)

   *path* の最終アクセス時刻を返します。 返り値はエポックからの秒数を
   表す浮動小数点数です ("time" モジュールを参照)。 ファイルが存在しな
   い場合やアクセスできない場合は "OSError" を送出します。

os.path.getmtime(path, /)

   *path* の最終更新時刻を返します。 返り値はエポックからの秒数を表す
   浮動小数点数です ("time" モジュールを参照)。 ファイルが存在しない場
   合やアクセスできない場合は "OSError" を送出します。

   バージョン 3.6 で変更: *path-like object* を受け入れるようになりま
   した。

os.path.getctime(path, /)

   システムの ctime、Unix系など一部のシステムでは最後にメタデータが変
   更された時刻、Windows などその他のシステムでは *path* の作成時刻を
   返します。返り値はエポック ("time" モジュールを参照) からの経過時間
   を示す秒数になります。ファイルが存在しない、あるいはアクセスできな
   かった場合は "OSError" を送出します。

   バージョン 3.6 で変更: *path-like object* を受け入れるようになりま
   した。

os.path.getsize(path, /)

   *path* のサイズをバイト数で返します。ファイルが存在しない、あるいは
   アクセスできなかった場合は "OSError" を送出します。

   バージョン 3.6 で変更: *path-like object* を受け入れるようになりま
   した。

os.path.isabs(path, /)

   *path* が絶対パス名の場合は "True" を返します。 Unix ではスラッシュ
   で始まるパス、Windows では 2 つのスラッシュまたはバックスラッシュで
   始まるパスか、ドライブレター、コロン、スラッシュまたはバックスラッ
   シュの並びで始まるパスを指します。

   参考: "abspath()"

   バージョン 3.6 で変更: *path-like object* を受け入れるようになりま
   した。

   バージョン 3.13 で変更: Windows では、指定されたパスがちょうど 1 つ
   のスラッシュまたはバックスラッシュで始まる場合に "False" を返すよう
   になりました。

os.path.isfile(path)

   *path* が "存在する" 一般ファイルなら "True" を返します。 この関数
   はシンボリックリンクの先を辿るので、同じパスに対して "islink()" と
   "isfile()" の両方が真を返すことがあります。

   バージョン 3.6 で変更: *path-like object* を受け入れるようになりま
   した。

os.path.isdir(path, /)

   *path* が "存在する" ディレクトリなら "True" を返します。 この関数
   はシンボリックリンクの先を辿るので、同じパスに対して "islink()" と
   "isdir()" の両方が真を返すことがあります。

   バージョン 3.6 で変更: *path-like object* を受け入れるようになりま
   した。

os.path.isjunction(path)

   *path* がジャンクションである "既存の" ディレクトリエントリを指して
   いる場合は "True" を返します。 現在のプラットフォームがジャンクショ
   ンをサポートしていない場合は、常に "False" を返します。

   Added in version 3.12.

os.path.islink(path)

   *path* が、シンボリックリンクである "既存の" ディレクトリエントリを
   指している場合に "True" を返します。 Python ランタイムがシンボリッ
   クリンクをサポートしていないプラットフォームでは、常に "False" を返
   します。

   バージョン 3.6 で変更: *path-like object* を受け入れるようになりま
   した。

os.path.ismount(path)

   Return "True" if pathname *path* is a *mount point*: a point in a
   file system where a different file system has been mounted.  On
   POSIX, the function checks whether *path*'s parent, "*path*/..", is
   on a different device than *path*, or whether "*path*/.." and
   *path* point to the same i-node on the same device --- this should
   detect mount points for all Unix and POSIX variants.  It is not
   able to reliably detect bind mounts on the same filesystem. On
   Linux systems, it will always return "True" for btrfs subvolumes,
   even if they aren't mount points. On Windows, a drive letter root
   and a share UNC are always mount points, and for any other path
   "GetVolumePathName" is called to see if it is different from the
   input path.

   バージョン 3.4 で変更: Windows でルート以外のマウントポイントの検出
   をサポートしました。

   バージョン 3.6 で変更: *path-like object* を受け入れるようになりま
   した。

os.path.isdevdrive(path)

   パス名 *path* が Windows の Dev Drive 上にある場合は "True" を返し
   ます。 Dev Drive は開発者向けの用途に最適化されており、ファイルの読
   み書きを高速に行えます。 ソースコード、ビルド用の一時ディレクトリ、
   パッケージのキャッシュ、その他の入出力が多い操作に使うことが推奨さ
   れます。

   認識可能なドライブを含まないパスなど、不正なパスに対してはエラーを
   送出する場合がありますが、Dev Drive をサポートしないプラットフォー
   ムでは "False" を返します。 Dev Drive を有効にする方法や作成する方
   法については、Windows のドキュメント を参照してください。

   Added in version 3.12.

   バージョン 3.13 で変更: すべてのプラットフォームで利用できるように
   なりました。 Dev Drive をサポートしないプラットフォームでは常に
   "False" を返します。

os.path.isreserved(path)

   *path* が現在のシステムで予約済みのパス名である場合は "True" を返し
   ます。

   Windows では、末尾が空白またはドットのファイル名、コロン
   ("name:stream" のようなファイルストリーム)、ワイルドカード文字
   ("'*?"<>'")、パイプ文字、ASCII 制御文字を含むファイル名、および
   "NUL"、"CON"、"CONIN$"、"CONOUT$"、"AUX"、"PRN"、"COM1"、"LPT1" な
   どの DOS デバイス名が予約されています。

   注釈:

     この関数は、ほとんどの Windows システムで使われる予約済みパスの規
     則を近似します。 これらの規則は Windows のリリースとともに変化し
     ます。 規則の変更が広く利用されるようになった場合、将来の Python
     リリースでこの関数が更新される可能性があります。

   利用可能な環境: Windows.

   Added in version 3.13.

os.path.join(path, /, *paths)

   1 つ以上のパス要素を適切に連結します。 返り値は *path* と **paths*
   のすべての要素を連結したもので、最後以外の空でない各要素の後には、
   ディレクトリ区切り文字がちょうど 1 つ入ります。 つまり、結果が区切
   り文字で終わるのは、最後の要素が空か、区切り文字で終わっている場合
   だけです。

   絶対パスの要素が現れると (Windows ではドライブとルートの両方が必要
   です)、それより前のすべての要素を無視し、その絶対パスから連結を続け
   ます。 例えば Linux では次のようになります。

      >>> os.path.join('/home/foo', 'bar')
      '/home/foo/bar'
      >>> os.path.join('/home/foo', '/home/bar')
      '/home/bar'

   Windows では、ルートから始まるパス要素 (例えば "r'\foo'") が現れて
   も、ドライブは変更されません。 異なるドライブ上の要素や絶対パスが現
   れた場合は、それより前のすべての要素を無視し、ドライブも設定し直し
   ます。 例えば、次のようになります。

      >>> os.path.join('c:\\', 'foo')
      'c:\\foo'
      >>> os.path.join('c:\\foo', 'd:\\bar')
      'd:\\bar'

   ドライブごとにカレントディレクトリがあるため、"os.path.join("c:",
   "foo")" は "c:\foo" ではなく、ドライブ "C:" のカレントディレクトリ
   からの相対パス ("c:foo") を表すことに注意してください。

   バージョン 3.6 で変更: *path* と *paths* が *path-like object* を受
   け付けるようになりました。

os.path.normcase(path, /)

   パス名の大文字・小文字を正規化します。 Windowsでは、パス名にある文
   字を全て小文字に、スラッシュをバックスラッシュに変換します。 他のオ
   ペレーティングシステムでは、パスを変更せずに返します。

   バージョン 3.6 で変更: *path-like object* を受け入れるようになりま
   した。

os.path.normpath(path)

   パスを正規化します。余分な区切り文字や上位レベル参照を除去し、
   "A//B"、"A/B/"、"A/./B" や "A/foo/../B" などはすべて "A/B" になりま
   す。この文字列操作は、シンボリックリンクを含むパスの意味を変えてし
   まう場合があります。Windows では、スラッシュをバックスラッシュに変
   換します。大文字小文字の正規化には "normcase()" を使用してください
   。

   注釈:

     POSIX システムでは、IEEE Std 1003.1 2013 Edition; 4.13 Pathname
     Resolution に従い、パス名がちょうど 2 つのスラッシュで始まる場合
     、その後の最初の要素を実装で定義した方法で解釈することがあります
     。 ただし、先頭のスラッシュが 3 つ以上の場合は 1 つとして扱います
     。

   バージョン 3.6 で変更: *path-like object* を受け入れるようになりま
   した。

os.path.realpath(path, /, *, strict=False)

   指定されたファイル名の正規のパスを返します。 パスに含まれるシンボリ
   ックリンクは解決されます (オペレーティングシステムがサポートしてい
   る場合)。 Windows では、"C:\\PROGRA~1" のような MS-DOS 形式 (8.3 形
   式とも呼びます) の名前も "C:\\Program Files" に解決します。 返され
   るパスの大文字・小文字はオペレーティングシステムが返す表記を使うた
   め、*path* の表記と異なる場合があります。 特にドライブレターは大文
   字になります。

   デフォルトでは、パスの各要素を順に評価し、存在しない要素、シンボリ
   ックリンクのループ、または評価時に "OSError" を送出する要素に到達す
   ると停止します。 そのような要素以降は、パスの既存の部分に変更せずに
   追加します。

   このように処理するエラーには「アクセスが拒否された」「ディレクトリ
   でない」「内部関数の引数が不正」などがあります。 そのため、結果のパ
   スは存在しなかったり、アクセスできなかったり、リンクやループをまだ
   含んでいたり、ディレクトリでないものを経由したりする場合があります
   。

   この動作はキーワード引数で変更できます:

   *strict* が "True" の場合、パスの評価中に最初に発生したエラーを再送
   出します。 具体的には、*path* が存在しない場合は
   "FileNotFoundError" を、その他の理由でアクセスできない場合は別の
   "OSError" を送出します。 *strict* が "ALL_BUT_LAST" の場合、パスの
   最後の要素は存在しなくても構いませんが、他のすべてのエラーは送出し
   ます。

   *strict* が "os.path.ALLOW_MISSING" の場合、"strict=True" と同様に
   、"FileNotFoundError" 以外のエラーを再送出します。 そのため、返され
   たパスにはシンボリックリンクは含まれませんが、指定されたファイルや
   その親ディレクトリの一部は存在しない場合があります。

   注釈:

     この関数は、パスを正規の形にするオペレーティングシステムの処理を
     模倣します。 リンクとそれに続くパス要素との関係について、この処理
     は Windows と UNIX で少し異なります。オペレーティングシステムの
     API は必要に応じてパスを正規の形にするため、通常はこの関数を呼び
     出す必要はありません。

   バージョン 3.6 で変更: *path-like object* を受け入れるようになりま
   した。

   バージョン 3.8 で変更: Windows においてシンボリックリンクとジャンク
   ションが解決されるようになりました。

   バージョン 3.10 で変更: *strict* 引数が追加されました。

   バージョン 3.15 で変更: *strict* パラメータに "ALL_BUT_LAST" と
   "ALLOW_MISSING" の値が追加されました。

os.path.ALL_BUT_LAST

   "realpath()" の *strict* 引数に使う特別な値。

   Added in version 3.15.

os.path.ALLOW_MISSING

   "realpath()" の *strict* 引数に使う特別な値。

   Added in version 3.15.

os.path.relpath(path, start=os.curdir)

   カレントディレクトリあるいはオプションの *start* ディレクトリからの
   *path* への相対パスを返します。これはパス計算で行っており、ファイル
   システムにアクセスして *path* や *start* の存在や性質を確認すること
   はありません。Windowsでは、 *path* と *start* が異なるドライブの場
   合、 "ValueError" を送出します。

   *start* のデフォルトは "os.curdir" です。

   バージョン 3.6 で変更: *path-like object* を受け入れるようになりま
   した。

os.path.samefile(path1, path2, /)

   引数の両パス名が同じファイルまたはディレクトリを参照している場合、
   "True" を返します。これは、デバイス番号と i-node 番号で決定されます
   。どちらかのパス名への "os.stat()" 呼び出しが失敗した場合、例外が送
   出されます。

   バージョン 3.2 で変更: Windows サポートを追加しました。

   バージョン 3.4 で変更: Windows が他のプラットフォームと同じ実装を使
   用するようになりました。

   バージョン 3.6 で変更: *path-like object* を受け入れるようになりま
   した。

os.path.sameopenfile(fp1, fp2)

   ファイル記述子 *fp1* と *fp2* が同じファイルを参照していたら "True"
   を返します。

   バージョン 3.2 で変更: Windows サポートを追加しました。

   バージョン 3.6 で変更: *path-like object* を受け入れるようになりま
   した。

os.path.samestat(stat1, stat2, /)

   stat タプル *stat1* と *stat2* が同じファイルを参照していれば
   "True" を返します。 これらのタプルは "os.fstat()" 、 "os.lstat()"
   あるいは "os.stat()" の返り値で構いません。 この関数は "samefile()"
   と "sameopenfile()" が内部で使う比較処理を実装しています。

   バージョン 3.4 で変更: Windows サポートを追加しました。

os.path.split(path, /)

   パス名 *path* を "(head, tail)" のペアに分割します。 *tail* はパス
   名の最後の要素で、*head* はそれより前のすべての部分です。 *tail* に
   スラッシュが含まれることはありません。 *path* がスラッシュで終わる
   場合、*tail* は空になります。 *path* にスラッシュがない場合、*head*
   は空になります。 *path* が空の場合は *head* と *tail* の両方が空に
   なります。 *head* がルート (1 つ以上のスラッシュのみ) でない限り、
   末尾のスラッシュを取り除きます。 いずれの場合も "join(head, tail)"
   は *path* と同じ場所へのパスを返しますが、文字列としては異なる場合
   があります。 "join()"、"dirname()"、"basename()" 関数も参照してくだ
   さい。

   バージョン 3.6 で変更: *path-like object* を受け入れるようになりま
   した。

os.path.splitdrive(path, /)

   パス名 *path* を "(drive, tail)" のペアに分割します。*drive* はマウ
   ントポイントか空文字列になります。ドライブ指定をサポートしていない
   システムでは、*drive* は常に空文字になります。どの場合でも、"drive
   + tail" は *path* と等しくなります。

   Windows では、パス名はドライブ名/UNC 共有ポイントと相対パスに分割さ
   れます。

   パスにドライブレターが含まれる場合、"drive" にはコロンまでのすべて
   の部分が含まれます。

      >>> splitdrive("c:/dir")
      ("c:", "/dir")

   パスが UNC パスを含む場合、"drive" にはホスト名と共有名が含まれます
   。

      >>> splitdrive("//host/computer/dir")
      ("//host/computer", "/dir")

   バージョン 3.6 で変更: *path-like object* を受け入れるようになりま
   した。

os.path.splitroot(path, /)

   パス名 *path* を 3 要素のタプル "(drive, root, tail)" に分割します
   。 *drive* はデバイス名またはマウントポイント、*root* はドライブの
   後に続く区切り文字の文字列、*tail* はルートより後のすべての部分です
   。 どの要素も空文字列になる場合があります。 いずれの場合も "drive +
   root + tail" は *path* と同じになります。

   POSIX システムでは *drive* は常に空です。 *root* は、空 (*path* が
   相対パスの場合)、1 つのスラッシュ (*path* が絶対パスの場合)、または
   2 つのスラッシュ (IEEE Std 1003.1-2017; 4.13 Pathname Resolution に
   従い実装が定義します) のいずれかです。 例えば、次のようになります。

      >>> splitroot('/home/sam')
      ('', '/', 'home/sam')
      >>> splitroot('//home/sam')
      ('', '//', 'home/sam')
      >>> splitroot('///home/sam')
      ('', '/', '//home/sam')

   Windows では *drive* は、空、ドライブレター名、UNC 共有、またはデバ
   イス名です。 *root* は、空、スラッシュ、またはバックスラッシュです
   。 例えば、次のようになります。

      >>> splitroot('C:/Users/Sam')
      ('C:', '/', 'Users/Sam')
      >>> splitroot('//Server/Share/Users/Sam')
      ('//Server/Share', '/', 'Users/Sam')

   Added in version 3.12.

os.path.splitext(path, /)

   パス名 *path* を "root + ext == path" となるペア "(root, ext)" に分
   割します。 拡張子 *ext* は空か、ピリオドで始まり、ピリオドを高々 1
   つ含む文字列です。

   パスに拡張子がない場合、*ext* は "''" になります。

      >>> splitext('bar')
      ('bar', '')

   パスに拡張子がある場合、*ext* には先頭のピリオドを含めた拡張子が設
   定されます。 それより前のピリオドは無視されることに注意してください
   。

      >>> splitext('foo.bar.exe')
      ('foo.bar', '.exe')
      >>> splitext('/foo/bar.exe')
      ('/foo/bar', '.exe')

   パスの最後の要素の先頭にあるピリオドは、"root" の一部とみなします。

      >>> splitext('.cshrc')
      ('.cshrc', '')
      >>> splitext('/foo/....jpg')
      ('/foo/....jpg', '')

   バージョン 3.6 で変更: *path-like object* を受け入れるようになりま
   した。

os.path.supports_unicode_filenames

   ファイル名に任意の Unicode 文字列を (システムの制限内で) 使用できる
   場合は "True" になります。
