前のトピックへ

11. ファイルとディレクトリへのアクセス

次のトピックへ

11.2. fileinput — 複数の入力ストリームをまたいだ行の繰り返し処理をサポートする。

このページ

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

このモジュールには、パス名を操作する便利な関数が定義されています。 ファイルの読み書きに関しては、 open() 、ファイルシステムへのアク セスに関しては、 os モジュールを参照下さい。

警告

これらの関数の多くは Windows の一律命名規則 (UNCパス名) を正しくサ ポートしていません。 splitunc()ismount() は正しく UNC パス名を操作できます。

ノート

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

  • posixpath for UNIX-style paths
  • ntpath for Windows paths
  • macpath for old-style MacOS paths
  • os2emxpath for OS/2 EMX paths
os.path.abspath(path)

path の標準化された絶対パスを返します。たいていのプラットフォーム では、 normpath(join(os.getcwd(), path)) と同じ結果になります。

バージョン 1.5.2 で追加.

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) で返 されるペアの最初の要素です。

os.path.exists(path)

path が存在するなら、 True を返します。壊れたシンボリックリン クについては False を返します。いくつかのプラットフォームでは、 たとえ path が物理的に存在していたとしても、リクエストされたファ イルに対する os.stat() の実行が許可されなければこの関数が False を返すことがあります。

os.path.lexists(path)

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

バージョン 2.4 で追加.

os.path.expanduser(path)

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

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

Windows では ~ だけがサポートされ、環境変数 HOME または HOMEDRIVEHOMEPATH の組み合わせで置き換えら れます。

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

os.path.expandvars(path)

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

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

os.path.getatime(path)

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

バージョン 2.3 で変更: os.stat_float_times() が True を返す場合、戻り値は浮動小数 点値となります。

バージョン 1.5.2 で追加.

os.path.getmtime(path)

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

バージョン 2.3 で変更: os.stat_float_times() が True を返す場合、戻り値は浮動小数点値となります。

バージョン 1.5.2 で追加.

os.path.getctime(path)

システムによって、ファイルの最終変更時刻 (Unix のようなシステム) や 作成時刻 (Windows のようなシステム) をシステムの ctime で返します。 戻り値はエポック (time モジュールを参照下さい) からの経過秒 数を示す数値です。 ファイルが存在しなかったりアクセスできない場合は os.error を 送出します。

バージョン 2.3 で追加.

os.path.getsize(path)

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

バージョン 1.5.2 で追加.

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 以降を結合したもので、 path2 が空文 字列でないなら、ディレクトリの区切り文字 (os.sep) が各要素の間 に挿入されます。 Windows では各ドライブに対してカレントディレクトリがあるので、 os.path.join("c:", "foo") によって、 c:\foo ではなく、 ドライブ C: 上のカレントディレクトリからの相対パス (c:foo) が返されます。

os.path.normcase(path)

パス名の大文字、小文字をシステムの標準にします。 Unix と Mac OS X ではそのまま返します。 大文字、小文字を区別しないファイルシステムではパス名を小文字に変換します。 Windows では、スラッシュをバックスラッシュに変換します。

os.path.normpath(path)

パス名を標準化します。余分な区切り文字や上位レベル参照を削除し、 A//BA/./BA/foo/../B が全て A/B になるように します。 大文字、小文字は標準化しません (それには normcase() を使って 下さい) 。 Windows では、スラッシュをバックスラッシュに変換します。 パスがシンボリックリンクを含んでいるかによって意味が変わることに注 意してください。

os.path.realpath(path)

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

バージョン 2.2 で追加.

os.path.relpath(path[, start])

カレントディレクトリ、または、オプション引数の start から、 path への相対ファイルパスを返します。

start のデフォルト値は os.curdir です。利用可能: Windows 、 Unix

バージョン 2.6 で追加.

os.path.samefile(path1, path2)

2つの引数であるパス名が同じファイルあるいはディレクトリを指していれ ば (同じデバイスナンバーと i-node ナンバーで示されていれば) 、 True を返します。どちらかのパス名で os.stat() の呼び出し に失敗した場合には、例外が発生します。利用可能: Unix

os.path.sameopenfile(fp1, fp2)

ファイルディスクリプタ fp1fp2 が同じファイルを指していたら、 True を返します。利用可能: Unix

os.path.samestat(stat1, stat2)

stat タプル stat1stat2 が同じファイルを指していたら、 True を返します。 これらのタプルは fstat()lstat()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 と等しく なります (ただ1つの例外は、複数のスラッシュが headtail を分 けている時です) 。

os.path.splitdrive(path)

パス名 path(drive, tail) のペアに分割します。 drive はド ライブ名か、空文字列です。 ドライブ名を使用しないシステムでは、 drive は常に空文字列です。全 ての場合に drive + tailpath と等しくなります。

バージョン 1.3 で追加.

os.path.splitext(path)

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

バージョン 2.6 で変更: 以前のバージョンでは、最初の文字がピリオドであった場合、空の root を生成していました。

os.path.splitunc(path)

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

os.path.walk(path, visit, arg)

path をルートとする各ディレクトリに対して (もし path がディレク トリなら path も含みます) 、 (arg, dirname, names) を引数とし て関数 visit を呼び出します。引数 dirname は訪れたディレクトリ を示し、引数 names はそのディレクトリ内のファイルのリスト (os.listdir(dirname) で得られる) です。 関数 visit によって names を変更して、 dirname 以下の対象とな るディレクトリのセットを変更することもできます。例えば、あるディレ クトリツリーだけ関数を適用しないなど。 (names で参照されるオブジェ クトは、 del あるいはスライスを使って正しく変更しなければなりません。)

ノート

ディレクトリへのシンボリックリンクはサブディレクトリとして扱われ ないので、 walk() による操作対象とはされません。 ディレクトリへのシンボリックリンクを操作対象とするには、 os.path.islink(file)os.path.isdir(file) で識別して、 walk() で必要な操作を実行しなければなりません。

警告

この関数は廃止予定で、 3.0 では削除されました。 os.walk() が残っています。

os.path.supports_unicode_filenames

任意のユニコード文字列を (ファイルシステムの制限内で) ファイルネー ムに使うことが可能で、 os.listdir() がユニコード文字列の 引数に対してユニコードを返すなら、真を返します。

バージョン 2.3 で追加.