ファイル操作を行うプログラムでは、指定されたパスが「ファイル」なのか、それとも「ディレクトリ(フォルダ)」なのかを区別して処理を分けたい場面が多々あります。例えば、ディレクトリの中にあるアイテム一覧を取得した後、ファイルに対してのみ読み込み処理を行いたい場合などです。
Pythonの標準ライブラリ os.path モジュールには、これらを判定するための専用関数 isfile() と isdir() が用意されています。
この記事では、これら2つの関数の使い方と、パスが存在しない場合の挙動について解説します。
1. ファイルかどうか判定する: os.path.isfile()
os.path.isfile() 関数は、引数に指定したパスが**「実在するファイル」である場合にのみ True** を返します。
- ディレクトリである場合:
False - 存在しない場合:
False
構文:
import os
結果 = os.path.isfile(パス)
具体的な使用例
レポートファイル monthly_report.pdf がファイルとして存在するかを確認します。
import os
# 判定対象のパス
file_target = "monthly_report.pdf"
dir_target = "backup_folder"
# ファイルかどうかをチェック
is_file_1 = os.path.isfile(file_target)
is_file_2 = os.path.isfile(dir_target)
print(f"'{file_target}' はファイルですか?: {is_file_1}")
print(f"'{dir_target}' はファイルですか?: {is_file_2}")
実行結果(カレントディレクトリにファイルとフォルダがある場合):
'monthly_report.pdf' はファイルですか?: True
'backup_folder' はファイルですか?: False
2. ディレクトリかどうか判定する: os.path.isdir()
os.path.isdir() 関数は、引数に指定したパスが**「実在するディレクトリ」である場合にのみ True** を返します。
- ファイルである場合:
False - 存在しない場合:
False
構文:
import os
結果 = os.path.isdir(パス)
具体的な使用例
バックアップ用のフォルダが存在するかを確認します。
import os
# 判定対象のパス
dir_target = "backup_folder"
file_target = "monthly_report.pdf"
# ディレクトリかどうかをチェック
is_dir_1 = os.path.isdir(dir_target)
is_dir_2 = os.path.isdir(file_target)
print(f"'{dir_target}' はディレクトリですか?: {is_dir_1}")
print(f"'{file_target}' はディレクトリですか?: {is_dir_2}")
実行結果:
'backup_folder' はディレクトリですか?: True
'monthly_report.pdf' はディレクトリですか?: False
3. 存在しないパスの判定
重要な注意点として、isfile() も isdir() も、対象のパスが存在しない場合は False を返します。
「ファイルではない = ディレクトリである」という論理は成り立ちません。「ファイルでもディレクトリでもない(存在しない)」という状態があるためです。
import os
# 存在しないパス
ghost_path = "phantom_file.txt"
print(f"存在確認: {os.path.exists(ghost_path)}")
print(f"ファイル判定: {os.path.isfile(ghost_path)}")
print(f"ディレクトリ判定: {os.path.isdir(ghost_path)}")
実行結果:
存在確認: False
ファイル判定: False
ディレクトリ判定: False
実践:リスト内のアイテムを分類する
ディレクトリ内のアイテム一覧を処理する際、ファイルとディレクトリを振り分ける処理は以下のように記述できます。
import os
# 処理対象のパスリスト(混在していると仮定)
path_list = ["config.ini", "logs", "setup.py", "assets"]
print("--- 分類開始 ---")
for path in path_list:
if os.path.isfile(path):
print(f"[FILE] {path} を読み込みます")
elif os.path.isdir(path):
print(f"[DIR ] {path} の中身を走査します")
else:
print(f"[None] {path} は見つかりません")
実行結果(例):
--- 分類開始 ---
[FILE] config.ini を読み込みます
[DIR ] logs の中身を走査します
[FILE] setup.py を読み込みます
[DIR ] assets の中身を走査します
まとめ
os.path.isfile(path): 実在するファイルならTrue。os.path.isdir(path): 実在するディレクトリならTrue。- パスが存在しない場合は、どちらもFalseになります。
- ファイル操作の前処理として、対象の種類を特定するために使用されます。
