pathlib —オブジェクト指向のファイルシステムパス
バージョン3.4の新機能。
ソースコード: :source: `Lib / pathlib.py`
このモジュールは、さまざまなオペレーティングシステムに適したセマンティクスを持つファイルシステムパスを表すクラスを提供します。 パスクラスは、I / Oなしの純粋な計算操作を提供する純粋なパスと、純粋なパスから継承するがI / O操作も提供する具象パスに分けられます。
class=align-center|../_images/pathlib-inheritance.png このモジュールをこれまで使用したことがない場合、またはどのクラスがタスクに適しているかわからない場合は、 Path が必要になる可能性があります。 コードが実行されているプラットフォームの具象パスをインスタンス化します。
純粋なパスは、いくつかの特別な場合に役立ちます。 例えば:
- UnixマシンでWindowsパスを操作する場合(またはその逆)。 Unixで実行している場合、 WindowsPath をインスタンス化することはできませんが、 PureWindowsPath をインスタンス化することはできます。
- コードが実際にOSにアクセスせずにパスのみを操作するようにする必要があります。 この場合、純粋なクラスの1つをインスタンス化すると、OSにアクセスする操作がないため、便利な場合があります。
基本的な使い方
メインクラスのインポート:
サブディレクトリの一覧表示:
このディレクトリツリーにPythonソースファイルを一覧表示します。
ディレクトリツリー内の移動:
パスプロパティのクエリ:
ファイルを開く:
純粋な道
純粋なパスオブジェクトは、実際にはファイルシステムにアクセスしないパス処理操作を提供します。 これらのクラスにアクセスするには、フレーバーとも呼ばれる3つの方法があります。
- class pathlib.PurePath(*pathsegments)
システムのパスフレーバーを表すジェネリッククラス(インスタンス化すると、 PurePosixPath または PureWindowsPath のいずれかが作成されます):
pathsegments の各要素は、パスセグメントを表す文字列、文字列を返す os.PathLike インターフェイスを実装するオブジェクト、または別のパスオブジェクトのいずれかです。
pathsegments が空の場合、現在のディレクトリが想定されます。
複数の絶対パスが指定されている場合、最後のパスがアンカーとして使用されます( os.path.join()の動作を模倣)。
ただし、Windowsパスでは、ローカルルートを変更しても、以前のドライブ設定は破棄されません。
スプリアススラッシュとシングルドットは折りたたまれていますが、ダブルドット(
'..'
)は折りたたまれていません。これは、シンボリックリンクに直面したパスの意味を変更するためです。(ナイーブなアプローチでは、
PurePosixPath('foo/../bar')
はPurePosixPath('bar')
と同等になりますが、foo
が別のディレクトリへのシンボリックリンクである場合は誤りです)純粋なパスオブジェクトは os.PathLike インターフェイスを実装し、インターフェイスが受け入れられる場所ならどこでも使用できるようにします。
バージョン3.6で変更: os.PathLike インターフェースのサポートが追加されました。
- class pathlib.PurePosixPath(*pathsegments)
PurePath のサブクラスであるこのパスフレーバーは、Windows以外のファイルシステムパスを表します。
pathsegments は、 PurePath と同様に指定されます。
- class pathlib.PureWindowsPath(*pathsegments)
PurePath のサブクラスであるこのパスフレーバーは、Windowsファイルシステムパスを表します。
pathsegments は、 PurePath と同様に指定されます。
実行しているシステムに関係なく、これらのクラスはすべて、システムコールを実行する操作を提供しないため、インスタンス化できます。
一般的なプロパティ
パスは不変でハッシュ可能です。 同じフレーバーのパスは同等で注文可能です。 これらのプロパティは、フレーバーの大文字と小文字を区別するセマンティクスを尊重します。
異なるフレーバーのパスは比較が等しくなく、順序付けできません。
演算子
スラッシュ演算子は、 os.path.join()と同様に、子パスの作成に役立ちます。
パスオブジェクトは、 os.PathLike を実装するオブジェクトが受け入れられる場所であればどこでも使用できます。
パスの文字列表現は、生のファイルシステムパス自体です(ネイティブ形式、例: Windowsではバックスラッシュを使用)。これは、ファイルパスを文字列として受け取る任意の関数に渡すことができます。
同様に、パスで bytes を呼び出すと、 os.fsencode()でエンコードされているように、生のファイルシステムパスがbytesオブジェクトとして提供されます。
個々の部品へのアクセス
パスの個々の「パーツ」(コンポーネント)にアクセスするには、次のプロパティを使用します。
- PurePath.parts
パスのさまざまなコンポーネントへのアクセスを提供するタプル:
(ドライブとローカルルートが単一の部分に再グループ化される方法に注意してください)
メソッドとプロパティ
純粋なパスは、次のメソッドとプロパティを提供します。
- PurePath.drive
ドライブ文字または名前(ある場合)を表す文字列:
UNC共有もドライブと見なされます。
- PurePath.root
(ローカルまたはグローバル)ルートを表す文字列(存在する場合):
UNC共有には常にルートがあります。
- PurePath.anchor
ドライブとルートの連結:
- PurePath.parents
パスの論理的な祖先へのアクセスを提供する不変のシーケンス:
- PurePath.parent
パスの論理的な親:
アンカーまたは空のパスを通過することはできません。
ノート
これは純粋に字句演算であるため、次の動作になります。
任意のファイルシステムパスを上に移動する場合は、最初に Path.resolve()を呼び出して、シンボリックリンクを解決し、“ ..” コンポーネントを削除することをお勧めします。
- PurePath.name
ドライブとルート(存在する場合)を除く、最終パスコンポーネントを表す文字列:
UNCドライブ名は考慮されません:
- PurePath.suffix
最終コンポーネントのファイル拡張子(ある場合):
- PurePath.suffixes
パスのファイル拡張子のリスト:
- PurePath.stem
接尾辞のない最終パスコンポーネント:
- PurePath.as_posix()
スラッシュ(
/
)を使用してパスの文字列表現を返します。
- PurePath.as_uri()
パスを
file
URIとして表します。 パスが絶対パスでない場合、 ValueError が発生します。
- PurePath.is_absolute()
パスが絶対であるかどうかを返します。 ルートと(フレーバーで許可されている場合)ドライブの両方がある場合、パスは絶対と見なされます。
- PurePath.is_reserved()
PureWindowsPath を使用して、パスがWindowsで予約されていると見なされる場合は、
True
を返し、それ以外の場合はFalse
を返します。 PurePosixPath を使用すると、False
が常に返されます。予約済みパスでのファイルシステムコールは、不思議なことに失敗したり、意図しない影響を及ぼしたりする可能性があります。
- PurePath.joinpath(*other)
このメソッドを呼び出すことは、パスを other 引数のそれぞれと順番に組み合わせるのと同じです。
- PurePath.match(pattern)
このパスを、提供されているグロブスタイルのパターンと照合します。 マッチングが成功した場合は
True
を返し、それ以外の場合はFalse
を返します。pattern が相対的である場合、パスは相対的または絶対的のいずれかであり、マッチングは右から行われます。
pattern が絶対である場合、パスは絶対である必要があり、パス全体が一致する必要があります。
他の方法と同様に、大文字と小文字の区別はプラットフォームのデフォルトに従います。
- PurePath.relative_to(*other)
other で表されるパスを基準にしてこのパスのバージョンを計算します。 それが不可能な場合、ValueErrorが発生します。
- PurePath.with_name(name)
name が変更された新しいパスを返します。 元のパスに名前がない場合、ValueErrorが発生します。
- PurePath.with_suffix(suffix)
サフィックスを変更した新しいパスを返します。 元のパスにサフィックスがない場合は、代わりに新しいサフィックスが追加されます。 サフィックスが空の文字列の場合、元のサフィックスは削除されます。
コンクリートの道
具象パスは、純粋なパスクラスのサブクラスです。 後者によって提供される操作に加えて、パスオブジェクトに対してシステムコールを実行するためのメソッドも提供します。 具体的なパスをインスタンス化するには、次の3つの方法があります。
- class pathlib.Path(*pathsegments)
PurePath のサブクラスであるこのクラスは、システムのパスフレーバーの具象パスを表します(インスタンス化すると、 PosixPath または WindowsPath のいずれかが作成されます)。
pathsegments は、 PurePath と同様に指定されます。
- class pathlib.PosixPath(*pathsegments)
Path および PurePosixPath のサブクラスであるこのクラスは、Windows以外の具体的なファイルシステムパスを表します。
pathsegments は、 PurePath と同様に指定されます。
- class pathlib.WindowsPath(*pathsegments)
Path および PureWindowsPath のサブクラスであるこのクラスは、具体的なWindowsファイルシステムパスを表します。
pathsegments は、 PurePath と同様に指定されます。
システムに対応するクラスフレーバーのみをインスタンス化できます(互換性のないパスフレーバーでシステムコールを許可すると、アプリケーションにバグや障害が発生する可能性があります)。
メソッド
具象パスは、純粋なパスメソッドに加えて、次のメソッドを提供します。 これらのメソッドの多くは、システムコールが失敗した場合(たとえば、パスが存在しないため)に OSError を発生させる可能性があります。
バージョン3.8で変更: exits()、 is_dir()、 is_file()、 is_mount() 、 is_symlink()、 is_block_device()、 is_char_device()、 is_fifo()、 is_socket() OSレベルで表現できない文字を含むパスの例外を発生させる代わりに、False
を返すようになりました。
- classmethod Path.cwd()
現在のディレクトリを表す新しいパスオブジェクトを返します( os.getcwd()によって返されます)。
- classmethod Path.home()
ユーザーのホームディレクトリを表す新しいパスオブジェクトを返します( os.path.expanduser()と
~
コンストラクトによって返されます)。バージョン3.5の新機能。
- Path.stat()
os.stat()のように、このパスに関する情報を含む os.stat_result オブジェクトを返します。 結果は、このメソッドを呼び出すたびに調べられます。
- Path.chmod(mode)
os.chmod()のように、ファイルモードと権限を変更します。
- Path.exists()
パスが既存のファイルまたはディレクトリを指しているかどうか:
ノート
パスがシンボリックリンクを指している場合、 exists()は、シンボリックリンクが既存のファイルまたはディレクトリを指しているかどうかを返します。
- Path.expanduser()
os.path.expanduser()によって返されるように、展開された
~
および~user
構造を持つ新しいパスを返します。バージョン3.5の新機能。
- Path.glob(pattern)
このパスで表されるディレクトリで、指定された相対パターンを取得し、一致するすべてのファイル(任意の種類)を生成します。
「
**
」パターンは、「このディレクトリとすべてのサブディレクトリを再帰的に」という意味です。 言い換えると、再帰的なグロブが可能になります。ノート
大規模なディレクトリツリーで「
**
」パターンを使用すると、非常に長い時間がかかる場合があります。
- Path.group()
- ファイルを所有しているグループの名前を返します。 KeyError は、ファイルのgidがシステムデータベースに見つからない場合に発生します。
- Path.is_dir()
パスがディレクトリ(またはディレクトリを指すシンボリックリンク)を指している場合は
True
を返し、別の種類のファイルを指している場合はFalse
を返します。False
は、パスが存在しないか、シンボリックリンクが壊れている場合にも返されます。 その他のエラー(権限エラーなど)が伝播されます。
- Path.is_file()
パスが通常のファイル(または通常のファイルを指すシンボリックリンク)を指している場合は
True
を返し、別の種類のファイルを指している場合はFalse
を返します。False
は、パスが存在しないか、シンボリックリンクが壊れている場合にも返されます。 その他のエラー(権限エラーなど)が伝播されます。
- Path.is_mount()
パスがマウントポイントの場合は
True
を返します。別のファイルシステムがマウントされているファイルシステム内のポイントです。 POSIXでは、この関数は path の親であるpath/..
が path とは異なるデバイス上にあるかどうか、またはpath/..
と ] path は、同じデバイス上の同じiノードを指します—これにより、すべてのUnixおよびPOSIXバリアントのマウントポイントが検出されます。 Windowsには実装されていません。バージョン3.7の新機能。
- Path.is_symlink()
パスがシンボリックリンクを指している場合は
True
を返し、そうでない場合はFalse
を返します。パスが存在しない場合も
False
が返されます。 その他のエラー(権限エラーなど)が伝播されます。
- Path.is_socket()
パスがUnixソケット(またはUnixソケットを指すシンボリックリンク)を指している場合は
True
を返し、別の種類のファイルを指している場合はFalse
を返します。False
は、パスが存在しないか、シンボリックリンクが壊れている場合にも返されます。 その他のエラー(権限エラーなど)が伝播されます。
- Path.is_fifo()
パスがFIFO(またはFIFOを指すシンボリックリンク)を指している場合は
True
を返し、別の種類のファイルを指している場合はFalse
を返します。False
は、パスが存在しないか、シンボリックリンクが壊れている場合にも返されます。 その他のエラー(権限エラーなど)が伝播されます。
- Path.is_block_device()
パスがブロックデバイス(またはブロックデバイスを指すシンボリックリンク)を指している場合は
True
を返し、別の種類のファイルを指している場合はFalse
を返します。False
は、パスが存在しないか、シンボリックリンクが壊れている場合にも返されます。 その他のエラー(権限エラーなど)が伝播されます。
- Path.is_char_device()
パスが文字デバイス(または文字デバイスを指すシンボリックリンク)を指している場合は
True
を返し、別の種類のファイルを指している場合はFalse
を返します。False
は、パスが存在しないか、シンボリックリンクが壊れている場合にも返されます。 その他のエラー(権限エラーなど)が伝播されます。
- Path.iterdir()
パスがディレクトリを指している場合、ディレクトリの内容のパスオブジェクトを生成します。
子は任意の順序で生成され、特別なエントリ
'.'
および'..'
は含まれません。 イテレータの作成後にファイルがディレクトリから削除またはディレクトリに追加された場合、そのファイルのパスオブジェクトを含めるかどうかは指定されていません。
- Path.lchmod(mode)
- Path.chmod()と同様ですが、パスがシンボリックリンクを指している場合、ターゲットではなくシンボリックリンクのモードが変更されます。
- Path.lstat()
- Path.stat()と同様ですが、パスがシンボリックリンクを指している場合は、ターゲットではなくシンボリックリンクの情報を返します。
- Path.mkdir(mode=0o777, parents=False, exist_ok=False)
この指定されたパスに新しいディレクトリを作成します。 mode が指定されている場合、それはプロセスの
umask
値と組み合わされて、ファイルモードとアクセスフラグを決定します。 パスがすでに存在する場合、 FileExistsError が発生します。parents がtrueの場合、このパスの欠落している親は必要に応じて作成されます。 これらは、モードを考慮せずにデフォルトのアクセス許可で作成されます(POSIX
mkdir -p
コマンドを模倣)。親がfalse(デフォルト)の場合、親が見つからないと FileNotFoundError が発生します。
exit_ok がfalse(デフォルト)の場合、ターゲットディレクトリがすでに存在すると、 FileExistsError が発生します。
exit_ok がtrueの場合、 FileExistsError 例外は無視されます(POSIX
mkdir -p
コマンドと同じ動作)が、最後のパスコンポーネントが既存の非ディレクトリファイル。バージョン3.5で変更: exit_ok パラメーターが追加されました。
- Path.open(mode='r', buffering=- 1, encoding=None, errors=None, newline=None)
組み込みの open()関数のように、パスが指すファイルを開きます。
- Path.owner()
- ファイルを所有しているユーザーの名前を返します。 KeyError は、ファイルのuidがシステムデータベースに見つからない場合に発生します。
- Path.read_bytes()
ポイントされたファイルのバイナリコンテンツをbytesオブジェクトとして返します。
バージョン3.5の新機能。
- Path.read_text(encoding=None, errors=None)
ポイントされたファイルのデコードされた内容を文字列として返します。
ファイルを開いてから閉じます。 オプションのパラメータは、 open()と同じ意味です。
バージョン3.5の新機能。
- Path.rename(target)
このファイルまたはディレクトリの名前を指定された target に変更し、 target を指す新しいPathインスタンスを返します。 Unixでは、 target が存在し、それがファイルである場合、ユーザーに権限があれば、サイレントに置き換えられます。 target は、文字列または別のパスオブジェクトのいずれかです。
ターゲットパスは絶対パスでも相対パスでもかまいません。 相対パスは、Pathオブジェクトのディレクトリではなく現在の作業ディレクトリを基準にして解釈されます。
バージョン3.8で変更:戻り値を追加し、新しいPathインスタンスを返します。
- Path.replace(target)
このファイルまたはディレクトリの名前を指定された target に変更し、 target を指す新しいPathインスタンスを返します。 target が既存のファイルまたはディレクトリを指している場合、無条件に置き換えられます。
ターゲットパスは絶対パスでも相対パスでもかまいません。 相対パスは、Pathオブジェクトのディレクトリではなく現在の作業ディレクトリを基準にして解釈されます。
バージョン3.8で変更:戻り値を追加し、新しいPathインスタンスを返します。
- Path.resolve(strict=False)
パスを絶対にし、シンボリックリンクを解決します。 新しいパスオブジェクトが返されます。
「
..
」コンポーネントも削除されます(これが唯一の方法です)。パスが存在せず、 strict が
True
の場合、 FileNotFoundError が発生します。 strict がFalse
の場合、パスは可能な限り解決され、残りは存在するかどうかを確認せずに追加されます。 解決パスに沿って無限ループが発生すると、 RuntimeError が発生します。バージョン3.6の新機能: strict 引数(3.6より前の動作は厳密です)。
- Path.rglob(pattern)
これは、指定された相対パターンの前に「
**/
」を追加して Path.glob()を呼び出すようなものです。
- Path.rmdir()
- このディレクトリを削除します。 ディレクトリは空である必要があります。
- Path.samefile(other_path)
このパスが other_path と同じファイルを指しているかどうかを返します。このファイルは、Pathオブジェクトまたは文字列のいずれかです。 セマンティクスは、 os.path.samefile()および os.path.samestat()に似ています。
何らかの理由でいずれかのファイルにアクセスできない場合、 OSError が発生する可能性があります。
バージョン3.5の新機能。
- Path.symlink_to(target, target_is_directory=False)
このパスをターゲットへのシンボリックリンクにします。 Windowsでは、リンクのターゲットがディレクトリの場合、 target_is_directory はtrue(デフォルトは
False
)である必要があります。 POSIXでは、 target_is_directory の値は無視されます。ノート
引数(リンク、ターゲット)の順序は、 os.symlink()の逆です。
- Path.link_to(target)
target をこのパスへのハードリンクにします。
警告
この関数は、関数名と引数名の意味にもかかわらず、このパスを target へのハードリンクにしません。 引数の順序(ターゲット、リンク)は Path.symlink_to()の逆ですが、 os.link()の順序と一致します。
バージョン3.8の新機能。
- Path.touch(mode=0o666, exist_ok=True)
- この指定されたパスにファイルを作成します。 mode が指定されている場合、それはプロセスの
umask
値と組み合わされて、ファイルモードとアクセスフラグを決定します。 ファイルがすでに存在する場合、 exit_ok がtrueの場合(およびその変更時刻が現在の時刻に更新される場合)、関数は成功します。それ以外の場合、 FileExistsError が発生します。
- Path.unlink(missing_ok=False)
このファイルまたはシンボリックリンクを削除します。 パスがディレクトリを指している場合は、代わりに Path.rmdir()を使用してください。
missing_ok がfalse(デフォルト)の場合、パスが存在しないと FileNotFoundError が発生します。
missing_ok がtrueの場合、 FileNotFoundError 例外は無視されます(POSIX
rm -f
コマンドと同じ動作)。バージョン3.8で変更: missing_ok パラメーターが追加されました。
- Path.write_bytes(data)
バイトモードでポイントされたファイルを開き、それに data を書き込んで、ファイルを閉じます。
同じ名前の既存のファイルが上書きされます。
バージョン3.5の新機能。
- Path.write_text(data, encoding=None, errors=None)
ポイントされたファイルをテキストモードで開き、 data を書き込んで、ファイルを閉じます。
同じ名前の既存のファイルが上書きされます。 オプションのパラメータは、 open()と同じ意味です。
バージョン3.5の新機能。
os モジュールのツールへの対応
以下は、さまざまな os 関数を対応する PurePath / Path の同等の関数にマッピングする表です。
ノート
os.path.relpath()と PurePath.relative_to()にはいくつかの重複するユースケースがありますが、それらのセマンティクスは十分に異なるため、同等とは見なされません。