Pythonでファイルが存在するかどうかを確認するには複数の方法があります。本記事では5つの代表的な方法を紹介し、それぞれの特徴と使い分けについて解説します。
確認方法
os.path.exists()
ファイルやディレクトリの存在を確認する最も一般的な方法です。パスが存在する場合はTrue、存在しない場合はFalseを返します。
import os
# ファイルの存在を確認する
file_path = "example.txt"
if os.path.exists(file_path):
print(f"{file_path}は存在します")
else:
print(f"{file_path}は存在しません")
# 出力例:
# example.txtは存在しません
この方法はファイルとディレクトリの両方を確認できますが、区別はできません。
os.path.isfile()
パスがファイルであるかどうかを確認します。ファイルの場合はTrue、ディレクトリや存在しないパスの場合はFalseを返します。
import os
# パスがファイルかどうかを確認する
file_path = "example.txt"
dir_path = "example_dir"
if os.path.isfile(file_path):
print(f"{file_path}はファイルです")
else:
print(f"{file_path}はファイルではないか、存在しません")
if os.path.isfile(dir_path):
print(f"{dir_path}はファイルです")
else:
print(f"{dir_path}はファイルではないか、存在しません")
# 出力例:
# example.txtはファイルではないか、存在しません
# example_dirはファイルではないか、存在しません
ファイルとディレクトリを区別したい場合に便利です。
pathlib.Path
Python 3.4以降で導入されたpathlibモジュールを使用する方法です。オブジェクト指向のアプローチでファイルパスを扱えます。
from pathlib import Path
# ファイルの存在を確認する
file_path = Path("example.txt")
if file_path.exists():
print(f"{file_path}は存在します")
else:
print(f"{file_path}は存在しません")
# ファイルかどうかも確認できる
if file_path.is_file():
print(f"{file_path}はファイルです")
elif file_path.is_dir():
print(f"{file_path}はディレクトリです")
else:
print(f"{file_path}は存在しません")
# 出力例:
# example.txtは存在しません
# example.txtは存在しません
pathlibは現代的なPythonコードで推奨される方法で、パス操作に関する多くの便利なメソッドも提供しています。以下に代表的なパス操作の例を示します。
from pathlib import Path
# パスの結合 - スラッシュ演算子を使って直感的にパスを結合できる
base_dir = Path("/home/user")
file_path = base_dir / "documents" / "report.txt" # /home/user/documents/report.txt
# ファイル名の取得 - パスからファイル名部分だけを簡単に取得
print(file_path.name) # report.txt
# 拡張子の取得 - ファイルの拡張子を取得
print(file_path.suffix) # .txt
# 親ディレクトリの取得 - ファイルの親ディレクトリを取得
print(file_path.parent) # /home/user/documents
# 出力例:
# report.txt
# .txt
# /home/user/documents
pathlibの他の機能をさらに詳しく知りたい場合は公式を参照ください。
try-except文
ファイルを開こうとして、例外が発生するかどうかで存在を確認する方法です。
# try-except文でファイルの存在を確認する
file_path = "example.txt"
try:
with open(file_path, 'r') as file:
print(f"{file_path}は存在し、開くことができました")
except FileNotFoundError:
print(f"{file_path}は存在しません")
except PermissionError:
print(f"{file_path}は存在しますが、アクセス権がありません")
# 出力例:
# example.txtは存在しません
この方法はファイルが存在するだけでなく、実際に開けるかどうかも確認できます。
glob.glob()
globモジュールを利用して、パターンマッチングでファイルを検索する方法です。指定したパターンに一致するファイルのリストを返します。
import glob
# 特定のパターンに一致するファイルを検索する
pattern = "*.txt"
txt_files = glob.glob(pattern)
if txt_files:
print(f"{pattern}に一致するファイルが見つかりました: {txt_files}")
else:
print(f"{pattern}に一致するファイルは見つかりませんでした")
# 出力例:
# *.txtに一致するファイルは見つかりませんでした
複数のファイルを一度に検索したい場合に便利です。
使い分け
各方法の特徴と適した使用シーンは以下の通りです。
- os.path.exists(): 単純にパスが存在するかどうかを確認したい場合に使用します。
- os.path.isfile(): ファイルとディレクトリを区別したい場合に使用します。
- pathlib.Path.exists(): 現代的なPythonコードを書きたい場合や、パスに対して複数の操作を行う場合に使用します。
- try-except文: ファイルが存在するだけでなく、実際にアクセス可能かどうかも確認したい場合に使用します。
- glob.glob(): 複数のファイルをパターンで検索したい場合に使用します。
まとめ
Pythonでファイルの存在を確認する方法は複数あり、状況に応じて適切な方法を選ぶことが重要です。
- os.path.exists() と os.path.isfile() は基本的な方法で、シンプルな確認に適しています。
- pathlib.Path は現代的で機能が豊富なアプローチを提供します。
- try-except はファイルの存在だけでなくアクセス可能性も確認できます。
- glob.glob() はパターンマッチングによる複数ファイルの検索に適しています。
実際のプロジェクトでは、これらの方法を目的に応じて使い分けることで、効果的にファイルの存在確認を行うことができます。