PYTHON MEBY

Pythonでファイル・ディレクトリの存在確認(os.path.exists, os.path.isfile, os.path.isdir)

この記事では、Pythonのosモジュールを使って、ファイルやディレクトリが存在するかどうかを確認する方法を説明します。os.path.exists(), os.path.isfile(), os.path.isdir()の使い方と注意点について解説します。

目次

os.path.exists(): ファイルまたはディレクトリの存在確認

os.path.exists()は、指定されたパスがファイルまたはディレクトリとして存在するかどうかをチェックします。存在する場合はTrue、存在しない場合はFalseを返します。

import os
print(os.path.exists("/tmp/test.txt")) # /tmp/test.txtが存在するかどうか
print(os.path.exists("/tmp/test_dir")) # /tmp/test_dirが存在するかどうか

パスが存在するかどうかを確認するシンプルな関数です。ファイルまたはディレクトリのどちらが存在するのかを区別する必要がない場合に便利です。

os.path.isfile(): ファイルの存在確認

os.path.isfile()は、指定されたパスがファイルとして存在するかどうかをチェックします。ファイルとして存在する場合はTrue、そうでない場合はFalseを返します。ディレクトリが存在してもFalseを返します。

import os
print(os.path.isfile("/tmp/test.txt"))
print(os.path.isfile("/tmp/test_dir"))

ファイルの存在確認に特化した関数です。引数にファイルパスを指定して、ファイルが存在するかどうかを確実に確認できます。

os.path.isdir(): ディレクトリの存在確認

os.path.isdir()は、指定されたパスがディレクトリとして存在するかどうかをチェックします。ディレクトリとして存在する場合はTrue、そうでない場合はFalseを返します。ファイルが存在してもFalseを返します。

import os
print(os.path.isdir("/tmp/test.txt"))
print(os.path.isdir("/tmp/test_dir"))

ディレクトリのみの存在確認に特化した関数です。引数にディレクトリパスを指定して、ディレクトリが存在するかどうかを確実に確認できます。

具体的な使用例

以下の例では、ファイルが存在するかどうかを確認し、存在しない場合はファイルを生成します。

import os
filepath = "/tmp/example.txt"
if not os.path.exists(filepath):
    with open(filepath, "w") as f:
        f.write("This is an example file.")
    print(f"ファイル'{filepath}'を作成しました。")
else:
    print(f"ファイル'{filepath}'は既に存在します。")

この例では、`os.path.exists()` を使用してファイルの存在を確認しています。存在しない場合のみ、ファイルを作成する処理を実行します。

例外処理

ファイルやディレクトリが存在しないパスにアクセスしようとすると例外が発生することがあります。例外処理を使用してプログラムの安定性を高めることが重要です。

import os
import errno
filepath = "/tmp/nonexistent_file.txt"
try:
    with open(filepath, 'r') as f:
        contents = f.read()
except FileNotFoundError:
    print(f"ファイル '{filepath}' は見つかりません。")
except OSError as e:
    if e.errno == errno.EACCES:
        print(f"ファイル '{filepath}' にアクセスできません。")
    else:
        print(f"ファイル '{filepath}' にアクセス中にエラーが発生しました: {e}")

この例では、`try-except` ブロックを使用して `FileNotFoundError` や `OSError` などの例外を処理しています。`OSError` は、ファイルのアクセス権がない場合(`errno.EACCES`)など、さまざまなエラーをカバーする例外です。

関連記事