Pythonでファイルやディレクトリを操作する際、従来はos
モジュールがよく使われてきました。
しかし、Python 3.4から導入されたpathlib
モジュールは、より直感的で簡潔なコードを提供します。
この記事では、pathlib
モジュールの基本を学び、パス操作を効率化する方法を紹介します。
pathlib
モジュールとは?
pathlib
モジュールは、オブジェクト指向のアプローチでファイルやディレクトリのパスを扱うための標準モジュールです。
これにより、従来の文字列ベースのパス操作に比べ、読みやすくエラーが少ないコードを記述できます。
例えば、以下のような操作が簡単に行えます。
モジュールを使用するには、まず以下のようにインポートします。
from pathlib import Path
基本的な使い方
Path
オブジェクトの生成
pathlib
の中心となるクラスはPath
です。以下のようにして、パスを表すPath
オブジェクトを作成します。
from pathlib import Path p = Path('example_dir/example_file.txt') print(p) # example_dir/example_file.txt
ファイルやディレクトリの存在確認
exists()
メソッドを使って、パスが存在するか確認できます。
p = Path('example_dir/example_file.txt') if p.exists(): print("ファイルが存在します") else: print("ファイルが存在しません")
ディレクトリかファイルかの判定
p = Path('example_dir') if p.is_dir(): print("これはディレクトリです") elif p.is_file(): print("これはファイルです")
パス操作の便利な機能
親ディレクトリやファイル名の取得
pathlib
を使うと、親ディレクトリやファイル名など、パスの構成要素を簡単に取得できます。
p = Path('example_dir/example_file.txt') print(p.parent) # example_dir print(p.name) # example_file.txt print(p.stem) # example_file print(p.suffix) # .txt
パスの結合
スラッシュ/
演算子を使うと、直感的にパスを結合できます。
base = Path('example_dir') file_path = base / 'example_file.txt' print(file_path) # example_dir/example_file.txt
絶対パスの取得
p = Path('example_dir/example_file.txt') print(p.resolve()) # 絶対パスを表示
ファイルとディレクトリの操作
ディレクトリの作成
mkdir()
メソッドでディレクトリを作成します。
p = Path('new_dir') if not p.exists(): p.mkdir() print(f"{p} を作成しました")
ファイルの読み書き
pathlib
にはファイルの内容を直接扱う方法も用意されています。
p = Path('example.txt') # ファイルに書き込む p.write_text('こんにちは、Python!') # ファイルを読み込む content = p.read_text() print(content) # こんにちは、Python!
write_text
メソッドを既存のファイルに対して行うと、ファイル内容を消去したうえで引数を書き込みます。
すなわち、上書きをします。
ディレクトリ内のファイル一覧
iterdir()
メソッドを使うと、ディレクトリ内のファイルやサブディレクトリを取得できます。
p = Path('example_dir') for item in p.iterdir(): print(item) # 各パスを表示
特定のパターンにマッチするファイルの検索
glob()
メソッドを使うと、特定のパターンに一致するファイルやディレクトリを検索できます。
p = Path('example_dir') # .txtファイルを検索 for file in p.glob('*.txt'): print(file) # 例: example1.txt, example2.txt
glob()
では正規表現風の書き方が使えます。例えば、以下のような表現が可能です。
*.txt
: 拡張子が.txt
のすべてのファイル*data*.csv
: 名前にdata
が含まれるCSVファイル**/*.py
: サブディレクトリを含めたすべてのPythonファイル(**
は再帰的検索)
また、再帰的検索を行う場合はrglob()
メソッドを使うこともできます。これにより、同じディレクトリ構造内でさらに柔軟な検索が可能です。
for file in p.rglob('*.py'): print(file) # サブディレクトリを含むすべてのPythonファイルを表示
応用例
ファイルのバックアップ
以下の例は、ファイルを別のディレクトリにバックアップするコードです。
from pathlib import Path import shutil def backup_files(src_dir, backup_dir): src = Path(src_dir) backup = Path(backup_dir) # バックアップディレクトリが存在しなければ作成 if not backup.exists(): backup.mkdir() # ファイルをバックアップ for file in src.iterdir(): if file.is_file(): shutil.copy(file, backup / file.name) print(f"{file.name} をバックアップしました") # 使用例 backup_files('example_dir', 'backup_dir')
まとめ
本記事では、以下の内容を学びました。
pathlib
モジュールの基本的な概要- パス操作(結合、親ディレクトリ、ファイル名取得など)の基本
- ファイルやディレクトリの操作(作成、読み書き、存在確認など)
glob
メソッドを用いたファイル検索とパターン指定- 応用例としてのバックアップスクリプト
pathlib
は、従来のos
モジュールに比べて直感的で使いやすい方法を提供します。特にパス操作を簡単にするため、これからPythonでファイルやディレクトリを扱う際には、ぜひpathlib
を活用してください。