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 形式のパスを扱う
posixpathWindows のパスを扱う
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'
参考
バージョン 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 つのスラッシュまたはバックスラッシュで始まるパスか、ドライブレター、コロン、スラッシュまたはバックスラッシュの並びで始まるパスを指します。参考
バージョン 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
Trueif 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 whetherpath/..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 returnTruefor 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 pathGetVolumePathNameis 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になります。