ファイル操作を行う前に、「そのファイルが本当にそこにあるか」を確認することは、エラー(FileNotFoundError)を防ぐために非常に重要です。
Pythonの標準ライブラリ os.path モジュールには、存在確認を行うための関数がいくつか用意されています。単に「存在するか」を知りたい場合や、「ファイルなのかディレクトリなのか」まで区別したい場合など、目的に応じて使い分ける必要があります。
この記事では、os.path.exists(), os.path.isfile(), os.path.isdir() の3つの関数の使い方について解説します。
1. 存在を確認する: os.path.exists()
os.path.exists() は、指定されたパスが**「ファイル」または「ディレクトリ(フォルダ)」として存在するかどうか**を確認します。どちらであっても存在すれば True を返します。
構文:
import os
存在するか = os.path.exists(パス)
具体的な使用例
設定ファイルが存在するかどうかを確認する例です。
import os
# 確認したいファイルのパス
config_path = "settings.yaml"
if os.path.exists(config_path):
print(f"確認完了: '{config_path}' は存在します。")
else:
print(f"エラー: '{config_path}' が見つかりません。")
実行結果(ファイルがない場合):
エラー: 'settings.yaml' が見つかりません。
2. 「ファイル」であることを確認する: os.path.isfile()
os.path.isfile() は、指定されたパスが存在し、かつそれが**「ファイル」である場合のみ** True を返します。ディレクトリだった場合は False になります。
ログファイルへの書き込み前など、対象が確実にファイルであることを保証したい場合に使用します。
import os
target_path = "app_data"
# ファイルかどうかを厳密にチェック
if os.path.isfile(target_path):
print(f"'{target_path}' はファイルです。処理を続行します。")
elif os.path.isdir(target_path):
print(f"'{target_path}' はディレクトリです。ファイルではありません。")
else:
print(f"'{target_path}' は存在しません。")
3. 「ディレクトリ」であることを確認する: os.path.isdir()
os.path.isdir() は、指定されたパスが存在し、かつそれが**「ディレクトリ」である場合のみ** True を返します。ファイルだった場合は False になります。
保存先のフォルダが存在するかを確認し、なければ作成するといった処理でよく使われます。
import os
# 保存先ディレクトリ
output_dir = "backup_folder"
if not os.path.isdir(output_dir):
print(f"ディレクトリ '{output_dir}' が存在しないため、新規作成します。")
os.makedirs(output_dir)
else:
print(f"ディレクトリ '{output_dir}' は既に存在します。")
まとめ
os.path.exists(path): ファイルかディレクトリかに関わらず、とにかく存在するかを知りたい場合に使用します。os.path.isfile(path): それがファイルであることを確認したい場合に使用します。os.path.isdir(path): それがディレクトリであることを確認したい場合に使用します。
用途に合わせてこれらを使い分けることで、より堅牢なファイル操作処理を記述できます。
