
本記事では、Pythonのpathlibモジュールでパスとファイルを操作する主要なコマンドの一覧と使用例について紹介します。
目次
- はじめに
- Pathオブジェクトの基本操作
- パスの操作
- カレントディレクトリを取得する(Path.cwd)
- 絶対パスを取得する(Path.resolve)
- 絶対パスかどうかを確認する(PurePath.is_absolute)
- ファイル名やディレクトリ名を変更する(拡張子含む)(Path.with_name)
- ファイル名の「拡張子」を除いた部分を変更する(Path.with_stem)
- 拡張子を変更する(Path.with_suffix)
- 相対パスを取得する(PurePath.relative_to)
- パスを結合する(PurePath.joinpath)
- パスが指定したパターンに一致するかを判定する(PurePath.match)
- パスが指定したパターンに一致するかを判定する(PurePath.full_match)
- パスの状態と種類を確認する
- パスの検索または探索
- ファイルの操作
- パーミッションと所有権の取得と変更
- まとめ
はじめに
動作確認は、以下の環境で行っております。
OS: Windows 11
Python 3.13.4
Python 3.4以降で導入されたpathlibは、パス操作を簡潔かつ直感的に記述できる非常に強力なモジュールです。特に、Pythonコードを書く際には従来のos.pathモジュールに比べて多くの利点があります。
- 可読性が高い(オブジェクト指向の設計により、パス操作がより直感的に行えます)
- 区切り文字に悩まない(末尾の区切り文字や
\と/を意識する必要がありません) - ファイル名や拡張子の操作が簡単(パスの属性に簡単にアクセスでき、置き換えも容易です)
- クロスプラットフォーム対応(Windows、Linux、macOSのいずれでも問題なく動作します)
- パスの検索がシンプル(再帰的な検索やフィルタリングが簡単に記述できます)
以降の記事では、pathlibの基本操作について説明した後、パスとファイルを操作するコマンドと使用例をご紹介します。
Pathオブジェクトの基本操作
オブジェクトを定義する
Pathオブジェクトは、次のように定義します。
from pathlib import Path
# Pathオブジェクトの定義
path = Path('C:\\Users\\user\\documents\\report.txt')
# パスの標準出力
print(path) # C:\Users\user\documents\report.txt定義したPathオブジェクトにprint文を用いると設定されているパスが表示されます。パスを設定する際には、/を用いてパスを結合することもできます。
from pathlib import Path
# Pathオブジェクトの定義
path = Path('C:\\') / 'Users' / 'user' / 'documents' / 'report.txt'
# パスの標準出力
print(path) # C:\Users\user\documents\report.txtPathオブジェクトの定義では、設定されたパスが実在するかどうかは調べませんので、存在しないパスを設定してもエラーは発生しません。
パス属性(ファイル名、拡張子など)にアクセスする
Pathオブジェクトを使用すると、パス属性(ファイル名、拡張子、親ディレクトリなど)を簡単に取得できます。
| パス属性 | 取得方法 |
| ファイル名(拡張子付き) | Path.name |
| ファイル名の「拡張子」を除いた部分 | Path.stem |
| 拡張子(.txtなど1つの場合) | Path.suffix |
| 拡張子リスト(.tar.gzなど複数の場合) | Path.suffixes |
| 1つ上の親ディレクトリ | Path.parent |
| 親ディレクトリのリスト | Path.parents |
| ルートディレクトリ | Path.root |
| Windowsのドライブ | Path.drive |
| ドライブとルートを結合した文字列 | Path.anchor |
| パスの各部分のタプル | Path.parts |
以下に例を示します。
from pathlib import Path
# Pathオブジェクトの定義(拡張子が1つの場合)
path = Path('C:\\Users\\user\\documents\\file.txt')
print(path.name) # file.txt
print(path.stem) # file
print(path.suffix) # .txt
print(path.suffixes) # ['.txt']
print(path.parent) # C:\Users\user\documents
print(path.parent.parent) # C:\Users\user
print(path.parents[0]) # C:\Users\user\documents
print(path.parents[1]) # C:\Users\user
print(path.root) # \
print(path.drive) # C:
print(path.anchor) # C:\
print(path.parts) # ('C:\\', 'Users', 'user', 'documents', 'file.txt')
# Pathオブジェクトの定義(拡張子が複数の場合)
path = Path('C:\\Users\\user\\documents\\archive.tar.gz')
print(path.name) # archive.tar.gz
print(path.stem) # archive.tar
print(path.suffix) # .gz
print(path.suffixes) # ['.tar', '.gz']
print(path.parent) # C:\Users\user\documents
print(path.parent.parent) # C:\Users\user
print(path.parents[0]) # C:\Users\user\documents
print(path.parents[1]) # C:\Users\user
print(path.root) # \
print(path.drive) # C:
print(path.anchor) # C:\
print(path.parts) # ('C:\\', 'Users', 'user', 'documents', 'archive.tar.gz')
# Pathオブジェクトの定義(ディレクトリの場合)
path = Path('C:\\Users\\user\\documents\\')
print(path.name) # documents
print(path.stem) # documents
print(path.suffix) #
print(path.suffixes) # []
print(path.parent) # C:\Users\user
print(path.parent.parent) # C:\Users
print(path.parents[0]) # C:\Users\user
print(path.parents[1]) # C:\Users
print(path.root) # \
print(path.drive) # C:
print(path.anchor) # C:\
print(path.parts) # ('C:\\', 'Users', 'user', 'documents')パスの操作
カレントディレクトリを取得する(Path.cwd)
Path.cwdは、「現在の作業ディレクトリ(カレントディレクトリ)」を取得するためのメソッドです。カレントディレクトリを返すPathオブジェクトが返されます。
from pathlib import Path
path = Path.cwd() # カレントディレクトリを取得
print(path) # C:\Test\Python-Snippets\Path絶対パスを取得する(Path.resolve)
Path.resolveは、指定したパスを絶対パスに解決するために使用するメソッドです。絶対パスを返すPathオブジェクトが返されます。引数strict(オプション)には、パスが存在しない場合やシンボリックリンクループの場合にエラーを発生させたいときはTrueに設定します(デフォルトFalse)
from pathlib import Path
path = Path('.\\file.txt').resolve() # 絶対パスに変換
print(path) # C:\Test\Python-Snippets\Path\file.txt絶対パスかどうかを確認する(PurePath.is_absolute)
PurePath.is_absoluteは、指定したパスが絶対パスであるかどうかを確認するために使用します。
from pathlib import Path
# 絶対パスの場合
path = Path('C:\\Users\\user\\documents\\file.txt')
print(path.is_absolute()) # True
# 相対パスの場合
path = Path('documents\\file.txt')
print(path.is_absolute()) # Falseこのメソッドは、パスが実際に存在するかどうかは確認しません。
ファイル名やディレクトリ名を変更する(拡張子含む)(Path.with_name)
Path.with_nameは、現在のPathオブジェクトに含まれるファイル名やディレクトリ名を指定した名前に変更して、新しいPathオブジェクトを返します。引数nameには新しい名前を与えます。
from pathlib import Path
# ファイルパスの場合
path = Path('C:\\Users\\user\\documents\\file.txt')
new_path = path.with_name('new_file.pdf') # ファイル名の変更
print(new_path) # C:\Users\user\documents\new_file.pdf
# ディレクトリパスの場合
path = Path('C:\\Users\\user\\documents')
new_path = path.with_name('new_dir') # ディレクトリ名の変更
print(new_path) # C:\Users\user\new_dirこのメソッドは、拡張子ごとファイル名を変更します。
また、パスが実際に存在するかどうかは確認しません。
ファイル名の「拡張子」を除いた部分を変更する(Path.with_stem)
Path.with_stemは、現在のPathオブジェクトに含まれるstem部分(ファイル名の拡張子を除いた部分やディレクトリ名)を変更して、新しいPathオブジェクトを返します。引数stemには新しいstem部分を与えます。
from pathlib import Path
# ファイルパスの場合
path = Path('C:\\Users\\user\\documents\\file.txt')
new_path = path.with_stem('new_stem')
print(new_path) # C:\Users\user\documents\new_stem.txt
# ファイルパス(拡張子が複数)の場合
path = Path('C:\\Users\\user\\documents\\archive.tar.gz')
new_path = path.with_stem('new_stem')
print(new_path) # C:\Users\user\documents\new_stem.gz
# ディレクトリパスの場合
path = Path('C:\\Users\\user\\documents')
new_path = path.with_stem('new_stem')
print(new_path) # C:\Users\user\new_stemこのメソッドは、パスが実際に存在するかどうかは確認しません。
拡張子が複数ある場合には、最後の拡張子のみを取り除いた部分がstemになることに注意が必要です。
拡張子を変更する(Path.with_suffix)
Path.with_suffixは、Pathオブジェクトの拡張子を変更して、新しい拡張子をもつPathオブジェクトを返します。引数suffixには新しい拡張子を与えます。
from pathlib import Path
# ファイルパスの場合
path = Path('C:\\Users\\user\\documents\\file.txt')
new_path = path.with_suffix('.pdf')
print(new_path) # C:\Users\user\documents\file.pdf
# 拡張子がない場合
path = Path('C:\\Users\\user\\documents\\')
new_path = path.with_suffix('.pdf')
print(new_path) # C:\Users\user\documents.pdf元のパスに拡張子がない場合でも、新しい拡張子を付加したパスを返します。
新しい拡張子が空文字や、ドットを含まない形式(例えば、'.txt'ではなく'txt')の場合にはエラーが発生します。
このメソッドは、パスが実際に存在するかどうかは確認しません。
相対パスを取得する(PurePath.relative_to)
PurePurePath.relative_toは、指定した親パスに対して、現在のパスを相対パスとして表現した新しいPathオブジェクトを返します。引数otherには、現在のパスを相対化する基準となるパスを与えます。
from pathlib import Path
path = Path('C:\\Users\\user\\documents\\file.txt')
relative_path = path.relative_to('C:\\Users\\user')
print(relative_path) # documents\file.txt親子関係になっていない場合は例外が発生します。例外を発生させずに、事前に親子関係を確認したい場合には、PurePath.is_relative_toを使用します。
from pathlib import Path
path = Path('C:\\Users\\user\\documents\\file.txt')
base_path = 'C:\\Users\\guest\\'
if path.is_relative_to(base_path):
relative_path = path.relative_to(base_path)
else:
print(f'{path}は{base_path}の下にはありません。') # C:\Users\user\documents\file.txtはC:\Users\guest\の下にはありません。このメソッドは、パスが実際に存在するかどうかは確認しません。
パスを結合する(PurePath.joinpath)
PurePath.joinpathは、現在のパスに対して1つ以上のパス要素を結合して新しいPathオブジェクトを返します。引数*pathsegmentsには、結合するパス要素を結合する順に1つ以上与えます。
from pathlib import Path
base_path = Path('C:\\Users\\user\\')
new_path = base_path.joinpath('documents', 'file.txt')
print(new_path) # C:\Users\user\documents\file.txt複数のパス要素を与える場合には、リストで引数を与えることもできます。
from pathlib import Path
base_path = Path('C:\\Users\\user\\')
list = ['documents', 'file.txt']
new_path = base_path.joinpath(*list)
print(new_path) # C:\Users\user\documents\file.txtまた、他のPathオブジェクトを引数に与えることもできます。
from pathlib import Path
base_path = Path('C:\\Users\\user\\')
new_path = base_path.joinpath(Path('documents\\file.txt'))
print(new_path) # C:\Users\user\documents\file.txt注意点として、パス要素の途中に絶対パスを挿入すると、それ以前のパスが無視されるので注意が必要です。
from pathlib import Path
base_path = Path('C:\\Users\\user\\')
new_path = base_path.joinpath('documents', 'D:\\', 'file.txt')
print(new_path) # D:\file.txtこのメソッドは、パスが実際に存在するかどうかは確認しません。
パスが指定したパターンに一致するかを判定する(PurePath.match)
PurePath.matchは、現在のパスが指定したパターンに一致するかどうかを判定します。パターンはglob形式で与えられたパターンを使用できます(*, ?など)。
第1引数patternに、マッチさせたいパターンを設定します。
オプション引数case_sensitiveは、Trueを設定すると大文字と小文字を区別し、Falseに設定すると区別しません(デフォルトNone)。
from pathlib import Path
path = Path('C:\\Users\\user\\documents\\file.txt')
print(path.match('*.txt')) # True
print(path.match('*.pdf')) # False
print(path.match('*\\documents\\*')) # Trueこのメソッドは空パターンや再帰的ワイルドカード(**)を使用できません(*と同じ動作をします)。
これらメソッドは、パスが実際に存在するかどうかは確認しません。
パスが指定したパターンに一致するかを判定する(PurePath.full_match)
PurePath.full_matchは、現在のパスが指定したパターンに一致するかどうかを判定します。パターンはglob形式で与えられたパターンを使用できます(*, ?, **など)。
PurePath.matchと使い方は同じで、空パターンや再帰的ワイルドカードを使用可能な点が異なります。Python 3.13以降で使用できます。
from pathlib import Path
path = Path('C:\\Users\\user\\documents\\file.txt')
print(path.full_match('**\\file.txt')) # Trueこれらメソッドは、パスが実際に存在するかどうかは確認しません。
パスの状態と種類を確認する
パスが存在するかを確認する(Path.exists)
Path.existsは、指定したパスが実際に存在するかどうかを確認します。ファイルまたはディレクトリが存在する場合はTrueを返し、それ以外の場合はFalseを返します。
from pathlib import Path
path = Path('C:\\Users\\user\\documents\\file.txt')
print(path.exists()) # パスが存在する場合はTrueこのメソッドは通常はシンボリックリンクをたどります。シンボリックリンク自体が存在するかを確認したい場合は、引数follow_symlinks=False(デフォルトTrue)を設定します。
パスがファイルかを確認する(Path.is_file)
Path.is_fileは、指定したパスがファイルかどうかを判定します。パスが存在し、かつ、それがファイルである場合にTrueを返し、それ以外の場合はFalseを返します。
from pathlib import Path
path = Path('C:\\Users\\user\\documents\\file.txt')
print(path.is_file()) # ファイルパスの場合はTrueこのメソッドは通常はシンボリックリンクをたどります。つまり、シンボリックリンクがファイルにリンクしている場合はTrueを返します。
シンボリックリンクの場合に常にFalseを返したい場合には、引数follow_symlinks=False(デフォルトTrue)を設定します(v3.13以上)。
パスが存在しない場合はFalseを返します。
パスがディレクトリか確認する(Path.is_dir)
Path.is_dirは、指定したパスがディレクトリであるかどうかを判定します。パスが存在し、かつそれがディレクトリである場合にTrueを返し、それ以外の場合はFalseを返します。
from pathlib import Path
path = Path('C:\\Users\\user\\documents\\')
print(path.is_dir()) # ディレクトリパスの場合はTrueこのメソッドは通常はシンボリックリンクをたどります。つまり、シンボリックリンクがディレクトリにリンクしている場合はTrueを返します。
シンボリックリンクの場合に常にFalseを返したい場合には、引数follow_symlinks=False(デフォルトTrue)を設定します(v3.13以上)。
パスが存在しない場合はFalseを返します。
パスがシンボリックリンクか確認する(Path.is_symlink)
Path.is_symlinkは、指定したパスがシンボリックリンクであるかどうかを判定します。パスがシンボリックリンクである場合にTrueを返し、それ以外の場合はFalseを返します。
from pathlib import Path
path = Path('link')
print(path.is_symlink()) # シンボリックリンクの場合はTrueこのメソッドはシンボリックリンクのパスであれば、リンクが壊れている場合でもTrueを返します。
パスが存在しない場合はFalseを返します。
パスの検索または探索
ディレクトリツリーを再帰的に辿りファイルとディレクトリをリストアップする(Path.walk)
Path.walkは、ディレクトリツリー(フォルダ構造)をトップダウンまたはボトムアップで探索し、各ディレクトリの中身を取得できます(v3.12以上)。
関数の構造は以下のようになります。
Path.walk(top_down=True, on_error=None, follow_symlinks=False)オプション引数top_downは、Trueの場合、ディレクトリを上から下(親ディレクトリから子ディレクトリ)に辿ります。また、Falseの場合は逆に下から上に辿ります。デフォルトはTrueです。
オプション引数on_errorは、デフォルトではエラーが無視されます。このオプションに関数を渡すと、エラーカスタム処理できます。
オプション引数follow_symlinksは、Trueの場合、シンボリックリンクを探索するリストに追加します。Falseの場合には追加されません。
この関数は、3つの要素(dirpath, dirnames, filenames)をもつタプルを返します。dirpathは探索中のディレクトリのパス、dirnamesは探索中のディレクトリ内にあるすべてのサブディレクトリのリスト、filenamesは探索中のディレクトリ内にあるすべてのファイルのリストになります。
from pathlib import Path
path = Path('C:\\test')
for dirpath, dirnames, filenames in path.walk():
print(f'Directory: {dirpath}') # 探索中のディレクトリ
print(f'Sub-directory: {dirnames}') # 探索中のディレクトリ内のサブディレクトリのリスト
print(f'Files: {filenames}') # 探索中のディレクトリ内のファイルのリスト
print()例えば、C:\test内のディレクトリとファイルの構造が、
C:\test
├─Python-Projects
│ ├─ProjectA
│ └─ProjectB
└─Python-Snippets
└─Path
test.pyの場合には、次の出力が得られます。
Directory: C:\test
Sub-directory: ['Python-Projects', 'Python-Snippets']
Files: []
Directory: C:\test\Python-Projects
Sub-directory: ['ProjectA', 'ProjectB']
Files: []
Directory: C:\test\Python-Projects\ProjectA
Sub-directory: []
Files: []
Directory: C:\test\Python-Projects\ProjectB
Sub-directory: []
Files: []
Directory: C:\test\Python-Snippets
Sub-directory: ['Path']
Files: []
Directory: C:\test\Python-Snippets\Path
Sub-directory: []
Files: ['test.py']Path.walkを使用すると、ファイルやディレクトリのパスにdirpath / nameでアクセスでき、(dirpath / name)にはPathオブジェクトのメソッドを使用できます(下例)。
from pathlib import Path
path = Path('C:\\test')
for dirpath, dirnames, filenames in path.walk():
for name in filenames:
print((dirpath / name).name) # ファイル名を出力
for name in dirnames:
print((dirpath / name).name) # ディレクトリ名を出力例えば、Path.nameの部分をPath.unlinkやPath.rmdirメソッドに変更すると、ファイルやディレクトリを削除できます。
dirpath / nameのdirpathとnameは、それぞれfor文で定義された変数で、この変数名は変更することができます。
シンボリックリンクをたどるにはfollowlinks=Trueに設定しますが、シンボリックリンクをたどると無限ループが発生する可能性があるため、注意が必要です。
ディレクトリ内容のPathオブジェクトを取得する(Path.iterdir)
Path.iterdirは、指定したディレクトリ内の直下にあるすべてのエントリ(ファイル、ディレクトリ、シンボリックリンクなど)をイテレーターとして取得します。
イテレーターを用いて、順にエントリにアクセスすることで、それらのPathオブジェクトを取得できます。
メソッドを使用するPathオブジェクトには、ディレクトリパスを指定します。
from pathlib import Path
path = Path('C:\\Test\\Python-Snippets\\Path') # ディレクトリパスを指定
for entry in path.iterdir(): # ディレクトリの内容を順に取得する
print(entry) # entryはPathオブジェクト
# 指定したディレクトリ内のエントリのパス一覧が表示されるこのメソッドは直下のみを対象とし、再帰的には探索しません。
シンボリックリンクがディレクトリにリンクしている場合には、シンボリックリンクのパスも指定可能です。
不正なパスが指定された場合には、エラーが発生します。
指定したディレクトリ直下をパターンで検索する(Path.glob)
Path.globは、指定したディレクトリ内で指定したパターンに一致するファイルやディレクトリを探索します。
指定したパスの直下にあるエントリだけを対象にし、再帰的には探索しません(再帰的に探索する場合にはPath.rglobを使用します)。
関数の構造は以下のようになります。
Path.glob(pattern, *, case_sensitive=None, recurse_symlinks=False)引数patternには、探索するパターンを文字列で指定します(例:"*.txt"、"file_?.py")
オプション引数case_sensitiveは、デフォルトでNoneが設定されています。Noneを指定した場合、パスの一致判定にプラットフォームに依存した大文字小文字のルールを使用します。POSIXは大文字と小文字を区別し、Windowsは区別しません。常に区別する場合はTrue、常に区別したくない場合はFalseを設定します(v3.12以上)。
オプション引数recurse_symlinksは、Falseに設定した場合、このメソッドは"**"ワイルドカードの展開時にシンボリックリンクをたどりません。Trueに設定した場合には常にシンボリックリンクをたどります(c3.13以上)。
from pathlib import Path
path = Path('C:\\Test\\Python-Snippets\\Path') # ディレクトリパスを指定
for entry in path.glob("*"):
print(entry) # entryはPathオブジェクト
# ディレクトリ内のエントリのパス一覧が表示される存在しないパスやファイルパスを指定した場合にはエラーは発生せず、何も表示されません。
指定したディレクトリを再帰的にパターン検索する(Path.rglob)
Path.rglobは、指定したディレクトリ内で指定したパターンに一致するファイルやディレクトリを探索します。
Path.globが指定したディレクトリ直下を探索するの対して、Path.rglobは指定したディレクトリから再帰的にパターンを検索します。
使い方はPath.globと同じです。
from pathlib import Path
path = Path('C:\\Test\\Python-Snippets\\Path') # ディレクトリパスを指定
for entry in path.rglob("*"):
print(entry) # entryはPathオブジェクト
# ディレクトリ内のエントリのパス一覧が表示される存在しないパスやファイルパスを指定した場合にはエラーは発生せず、何も表示されません。
ファイルの操作
空のファイルの作成または更新日時の変更(Path.touch)
Path.touchは、指定したパスに空のファイルを作成します。もし、そのファイルがすでに存在している場合は、更新日時(タイムスタンプ)が更新されます。
構文は以下になります。
Path.touch(mode=0o666, exist_ok=True)オプション引数modeは、ファイルを新規作成する際のアクセス権限を指定します(8進数で指定)。デフォルトは0o666(読み書き可能)です。
オプション引数exist_okは、ファイルがすでに存在する場合の動作を制御します。Trueの場合はファイルが存在していてもエラーを発生させず、そのままタイムスタンプを更新します。Falseの場合には、ファイルが存在する場合は例外(FileExistsError)を発生させます。
from pathlib import Path
path = Path("example.txt")
path.touch() # 空のファイルの作成または更新日時の更新パスに存在しないディレクトリが含まれる場合、および、作成権限がない場合にもエラー(それぞれFileNotFoundError、PermissionError)が発生します。
ディレクトリを作成する(Path.mkdir)
Path.mkdirは、指定したパスにディレクトリを作成します。親ディレクトリが存在しない場合や、すでに同じ名前のディレクトリが存在する場合の動作を制御できます。
構文は以下になります。
Path.mkdir(mode=0o777, parents=False, exist_ok=False)オプション引数modeには、新しく作成するディレクトリのパーミッション(アクセス権限)を指定します(8進数で指定)。デフォルトは0o777です。
オプション引数parentsは、Trueにした場合には、指定したディレクトリの親ディレクトリも、存在しない場合には作成します。False(デフォルト)にした場合には、親ディレクトリが存在しない場合はエラーを発生させます。
オプション引数exist_okは、Trueにした場合には、指定したディレクトリがすでに存在していてもエラーを発生させません。False(デフォルト)にした場合には、すでにディレクトリが存在する場合はエラーを発生させます(v3.5以上)。
from pathlib import Path
path = Path("new_parent_dir\\new_dir") # 作成するディレクトリのパス
path.mkdir(
parents=True, # 親ディレクトリも作成
exist_ok=True, # 既に存在していてもエラーは発生させない
)ファイルまたはディレクトリの名前の変更および移動(Path.rename)
Path.renameは、指定したファイルまたはディレクトリを新しい名前に変更したり、新しい場所に移動したりするために使用されます。
引数targetには、リネーム後のパスを与えます。このメソッドはtargetを指す新しいPathオブジェクトを返します(v3.8以降)。
ファイルの名前およびディレクトリの名前を変更する場合の例を示します。
from pathlib import Path
path = Path("example.txt")
path.touch() # ファイル example.txt の作成
path.rename("renamed_example.txt") # ファイルの名前変更
path = Path("old_directory")
path.mkdir() # ディレクトリ old_directory の作成
path.rename("new_directory") # ディレクトリの名前変更ファイルをディレクトリに移動する場合の例を示します。
from pathlib import Path
path = Path("renamed_example.txt") # 移動するファイルのパス
path.rename(
"new_directory\\renamed_example.txt"
) # renamed_example.txtをnew_directoryに移動Windowsではtargetがすでに存在する場合はエラーが発生します(Linuxではユーザーにパーミッションがあれば置換されます)。
また、変更前のファイルやディレクトリが存在しない場合はエラーが発生します。
ファイルまたはディレクトリの名前の変更および移動(上書き)(Path.replace)
Path.replaceは、ファイルまたはディレクトリを別の場所に移動したり、名前を変更する際に使用されます。Path.renameと異なり、既存のファイルを無条件に置換します。
引数targetには、新しい名前または新しい場所を示すパスを指定します。
戻り値には、新しいPathオブジェクトを返します(v3.8以上)。
ファイルの名前およびディレクトリの名前を変更する場合の例を示します。
from pathlib import Path
path = Path("example.txt")
path.touch() # ファイル example.txt の作成
path.replace("renamed_example.txt") # ファイルの名前変更
path = Path("old_directory")
path.mkdir() # ディレクトリ old_directory の作成
path.replace("new_directory") # ディレクトリの名前変更ファイルをディレクトリに移動する場合の例を示します。
from pathlib import Path
path = Path("renamed_example.txt") # 移動するファイルのパス
path.replace(
"new_directory\\renamed_example.txt"
) # renamed_example.txtをnew_directoryに移動Windowsでは、既存のディレクトリを置換しようとするとPermissionErrorが発生します。
また、変更前のファイルやディレクトリが存在しない場合はエラーが発生します。
ファイルの削除(Path.unlink)
Path.unlinkは、ファイルやシンボリックリンクを削除するためのメソッドです。
オプション引数missing_okは、Trueにすると、削除対象が存在しない場合でもエラーを発生させません。False(デフォルト)では、削除対象が存在しない場合にエラーを発生させます。
from pathlib import Path
path = Path("example.txt")
path.unlink() # ファイルを削除このメソッドはファイルやシンボリックリンクを削除できますが、ディレクトリの削除はできません。
空のディレクトリを削除する(Path.rmdir)
Path.rmdirは、空ディレクトリを削除するためのメソッドです。削除対象のディレクトリが空でない場合にはエラーが発生します。
from pathlib import Path
path = Path("directory")
path.rmdir() # ディレクトリの削除パーミッションと所有権の取得と変更
ファイルやディレクトリのアクセス権を変更する(Path.chmod)
Path.chmodは、ファイルやディレクトリのアクセス権(パーミッション)を変更するために使用されます。
引数modeに、ファイルやディレクトリに適用するパーミッションを表す整数値を8進数で設定します(0o755など)。
from pathlib import Path
path = Path("example.txt")
path.touch() # 空のファイル作成
# パーミッションを変更 (rwxr--r--)
path.chmod(0o744)modeは8進数で表され、読み取り(4)、書き込み(2)、実行(1)を組み合わせたものを使用します(つまり0~7の値)。この整数0~7を所有者、グループユーザー、その他に対して順に並べて設定します(0o777など)。
WindowsではPOSIXのような詳細な権限管理が存在しないため、動作が制限されることがあります。
例えば、0o444を設定すると読み取り専用になります。

まとめ
Pythonのpathlibモジュールでパスやファイルを扱うコマンドについて概要と使用例をまとめました。ご参考になりましたら幸いです。