11.1. os.path — 共通のパス名操作

このモジュールには、パス名を操作する便利な関数が実装されています。ファイルの読み書きに関しては open() を、ファイルシステムへのアクセスに関しては os モジュールを参照してください。パスパラメータは文字列またはバイト列で渡すことができます。アプリケーションは、ファイル名を Unicode 文字列で表すことが推奨されています。残念ながら、Unix では文字列で表すことのできないファイル名があるため、Unix 上で任意のファイル名をサポートする必要のあるアプリケーションは、そのパス名にバイト列を使用すべきです。逆に、バイト列オブジェクトを使用すると Windows (標準の mbcs エンコーディング) 上ではすべてのファイル名を表すことができないため、Windows アプリケーションはファイルアクセスのために文字列オブジェクトを使用するべきです。

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

注釈

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

注釈

OS によって異なるパス名の決まりがあるため、標準ライブラリにはこのモジュールのいくつかのバージョンが含まれています。os.path モジュールは常に現在 Python が動作している OS に適したパスモジュールであるため、ローカルのパスを扱うのに適しています。各々のモジュールをインポートして 常に 一つのフォーマットを利用することも可能です。これらはすべて同じインタフェースを持っています:

  • posixpath UNIX スタイルのパス用

  • ntpath Windows パス用

  • macpath 古いスタイルの MacOS パス用

  • os2emxpath OS/2 EMX パス用

os.path.abspath(path)

パス名 path の正規化された絶対パスを返します。ほとんどのプラットフォームでは、これは関数 normpath() を次のように呼び出した時と等価です: normpath(join(os.getcwd(), path))

os.path.basename(path)

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

os.path.commonprefix(list)

パスの list の中に共通する最長の接頭辞を (パス名の 1 文字 1 文字を判断して) 返します。もし list が空なら、空文字列 ('') を返します。これは一度に 1 文字を扱うため、不正なパスを返すことがあるかもしれないので注意して下さい。

os.path.dirname(path)

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

os.path.exists(path)

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

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

os.path.lexists(path)

path が実在するパスなら True を返します。壊れたシンボリックリンクについては True を返します。os.lstat() がない環境では exists() と等価です。

os.path.expanduser(path)

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

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

Windows では、HOMEUSERPROFILE が設定されていればそれを使用します。設定されていない場合は、環境変数 HOMEPATHHOMEDRIVE の組み合わせで置き換えられます。先頭の ~user~ で得られるユーザパスの最後のディレクトリ要素を除去したものを利用します。

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

os.path.expandvars(path)

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

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

os.path.getatime(path)

path に最後にアクセスした時刻を、エポック (time モジュールを参照) からの経過時間を示す秒数で返します。ファイルが存在しない、あるいはアクセスできなかった場合は OSError を送出します。

os.stat_float_times()True を返す場合、この関数の返り値は浮動小数点数になります。

os.path.getmtime(path)

path を最後に更新した時刻を、エポック (time モジュールを参照) からの経過時間を示す秒数で返します。ファイルが存在しない、あるいはアクセスできなかった場合は OSError を送出します。

os.stat_float_times()True を返す場合、この関数の返り値は浮動小数点数になります。

os.path.getctime(path)

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

os.path.getsize(path)

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

os.path.isabs(path)

path が絶対パスなら True を返します。すなわち、Unix ではスラッシュで始まり、Windows ではドライブレターに続く (バック) スラッシュで始まる場合です。

os.path.isfile(path)

path が実在する一般ファイルなら True を返します。シンボリックリンクの場合にはその実体をチェックするので、同じパスに対して islink()isfile() の両方が True を返すことがあります。

os.path.isdir(path)

path が実在するディレクトリなら True を返します。シンボリックリンクの場合にはその実体をチェックするので、同じパスに対して islink()isdir() の両方が True を返すことがあります。

path がシンボリックリンクなら True を返します。シンボリックリンクがサポートされていないプラットフォームでは、常に False を返します。

os.path.ismount(path)

パス名 path がマウントポイント mount point (ファイルシステムの中で異なるファイルシステムがマウントされているところ) なら True を返します。この関数は path の親ディレクトリである path/..path と異なるデバイス上にあるか、あるいは path/..path が同じデバイス上の同じ i-node を指しているかをチェックします — これによってすべての Unix と POSIX 系システムでマウントポイントが検出できます。

os.path.join(path1[, path2[, ...]])

1 つあるいはそれ以上のパス要素をうまく結合します。付け加える要素に絶対パスがあれば、それより前の要素は (Windows ではドライブレターがあればそれも含めて) すべて破棄され、以降の要素を結合します。返り値は path1 と空文字列以外の path2 以降を結合したもので、ディレクトリの区切り文字 (os.sep) が末尾を除く各要素の後に挿入されます (最後の要素に空文字列が与えられた場合は、返すパスの最後にも区切り文字が付加されるということです)。 Windows では、ドライブごとにカレントディレクトリがあるため、os.path.join("c:", "foo")c:\foo ではなく、ドライブ C: 上のカレントディレクトリからの相対パス (c:foo) を表します。

os.path.normcase(path)

パス名の大文字・小文字をを正規化します。Unix および Mac OS X では変更せずに返します。大文字と小文字を区別しないファイルシステムでは小文字に変換します。Windows では、スラッシュをバックスラッシュに変換します。path が文字列型あるいはバイト列型ではない場合、TypeError を送出します。

os.path.normpath(path)

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

os.path.realpath(path)

パスの中のシンボリックリンク (もしそれが当該オペレーティングシステムでサポートされていれば) を取り除いて、指定されたファイル名を正規化したパスを返します。

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

カレントディレクトリあるいはオプションの start ディレクトリからの path への相対パスを返します。これは経路計算で行っており、ファイルシステムにアクセスして pathstart の存在や性質を確認することはありません。

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

利用できる環境: Unix、 Windows。

os.path.samefile(path1, path2)

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

Windows では、同一最終パス名の解決に Windows API GetFinalPathNameByHandle を呼び出します。ハンドルがファイルを取得できない場合、この関数は例外を送出します。

利用できる環境: Unix、 Windows。

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

os.path.sameopenfile(fp1, fp2)

ファイル記述子 fp1fp2 が同じファイルを参照していたら True を返します。

利用できる環境: Unix、 Windows。

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

os.path.samestat(stat1, stat2)

stat タプル stat1stat2 同じファイルを参照していたら True を返します。これらのタプルは os.fstat()os.lstat() あるいは os.stat() の返り値で構いません。この関数は samefile()sameopenfile() を使用した比較を基底として実装しています。

利用できる環境: Unix。

os.path.split(path)

パス名 path(head, tail) のペアに分割します。tail はパス名の構成要素の末尾で、head はそれより前の部分です。tail はスラッシュを含みません; もし path がスラッシュで終わっていれば tail は空文字列になります。もし path にスラッシュがなければ、head は空文字になります。path が空文字なら、headtail の両方が空文字になります。head の末尾のスラッシュは head がルートディレクトリ (または 1 個以上のスラッシュだけ) でない限り取り除かれます。join(head, tail) は常に path と同じ場所を返しますが、文字列としては異なるかもしれません。関数 dirname()basename() も参照してください。

os.path.splitdrive(path)

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

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

パスがドライブレターを含む場合、ドライブレターにはコロンまでが含まれます。例えば、splitdrive("c:/dir")("c:", "/dir") を返します。

パスが UNC パスを含む場合、ドライブレターにはホスト名と共有名までが含まれますが、共有名の後の区切り文字は含まれません。例えば、splitdrive("//host/computer/dir")("//host/computer", "/dir") を返します。

os.path.splitext(path)

パス名 path(root, ext) のペアに分割します。root + ext == path になります。ext は空文字列か 1 つのピリオドで始まり、多くても 1 つのピリオドを含みます。ベースネームを導出するピリオドは無視されます; splitext('.cshrc')('.cshrc', '') を返します。

os.path.splitunc(path)

バージョン 3.1 で撤廃: 代わりに splitdrive を使ってください。

パス名 path をペア (unc, rest) に分割します。ここで unc は (r'\\host\mount' のような) UNC マウントポイント、そして rest は (r'\path\file.ext' のような) パスの残りの部分です。ドライブレターを含むパスでは常に unc が空文字列になります。

利用できる環境: Windows。

os.path.supports_unicode_filenames

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