ファイルやディレクトリの存在チェック

プログラムの入出力でファイルやディレクトリを扱う際、存在チェックは欠かせないと思いますが、このページではその方法について解説します。

os.pathを使う方法

Python3でファイルやディレクトリの存在チェックの方法はいくつかありますが、os.pathモジュールのexistsを使用する方法が一般的だと思います。

from os import path
path.exists("./sample_file.txt") # パスの存在チェック

 
また、ファイルが存在するのかディレクトリが存在するのかを判別する場合はisfile()、isdir()が使えます。(ファイルかディレクトリかの判定にも使えます。)シンボリックリンクの存在確認をする場合はislink()を使用します。

from os import path
path.isfile("./sample_file.txt") # ファイル(存在)判定
path.isdir("./sample_file.txt") # ディレクトリ(存在)判定
path.islink("./sample_file.txt") # シンボリックリンク(存在)判定

 

pathlib.Pathを使う方法

Python3.4以降ではpathlib.Pathメソッドを利用する方法が提供されています。

import pathlib

# pathオブジェクトを取得
file_path = pathlib.Path("./sample_file.txt")

# パスの存在チェック
file_path.exists()

 
pathlib.Pathメソッドから返されるPathオブジェクトはオブジェクト指向のファイルシステムパスで、os.pathと同じくパスの存在確認以外にもファイル/ディレクトリの判定、存在判定を行うことができます。

import pathlib

# pathオブジェクトを取得
file_path = pathlib.Path("./sample_file.txt")

# 各種チェック
file_path.is_dir() # ファイル(存在)判定
file_path.is_file() # ディレクトリ(存在)判定
file_path.is_symlink() # シンボリックリンク(存在)判定

また、os.pathより機能が強化されており、例えばUnixドメインソケットの判定等を行うことも可能です。

file_path.is_socket() # ソケット(存在)判定
file_path.is_block_device() # ブロックデバイス(存在)判定