イントロダクション
Pythonでファイルが存在するかどうかを確認するには?これまでのファイル操作のチュートリアルで、Pythonでファイルの読み取り、書き込み、削除、コピーなど、ファイルに対してさまざまな操作を行うことを学んできました。
しかし、ファイルに対してこれらの操作を行う前に、そのファイルがすでに存在しているかどうかを確認する必要があります。
ファイルが存在しない場合、そのファイルから読み取ることも、コピーや削除を行うこともできません。
書き込みの際にも、情報の上書きを防ぐために、ファイルの存在を確認することがあります。
ここでは、ファイルの存在を確認するためのいくつかの方法について説明します。
Python でファイルが存在するかどうかを確認するメソッド
Pythonでファイルが存在するかどうかを確認するには、以下のさまざまな方法を使用します。
1. pathlib モジュールの使用
Python の pathlib モジュールは、 is_file(), is_dir(), exists() などの興味深いメソッドを持っています。
それでは、いくつかの例を見てみましょう。
import pathlib
path = pathlib.Path('file.txt')
print("pathlib-exists()---->",path.exists())
print("pathlib-is_file()---->",path.is_file())
print("pathlib-is_dir()---->",path.is_dir())
|
結果は以下の通りです。
import os.path
print("os.path-exists()---->",os.path.exists('file.txt'))
print("os.path-isfile()---->",os.path.isfile('file.txt'))
|
-
pathlib.Path()は指定されたファイル名につながるパスオブジェクトを返し、それは変数 ‘path’ に格納されます。 -
pathlib.exists()メソッドは、与えられたパスが有効なファイルにつながるかどうかをチェックします。この例では、file.txtのパスは存在するので、結果は真となります。 -
is_file()メソッドは、一方では、パスオブジェクトがファイルであるかどうかをチェックします。一方、is_file()メソッドはパスオブジェクトがファイルであるかどうかをチェックします。 -
is_dir()メソッドは与えられたパスがディレクトリであるかどうかをチェックします。ここでは、file.txtのパスはディレクトリではないので、上記のような出力が得られます。
この記事もチェック:Pythonのstatisticsモジュールで便利なメソッドを7つ紹介する
2. os モジュールの使用
ファイルの存在を確認するためによく使われる方法のひとつに、pythonの標準ライブラリにあるos.pathモジュールがあります。
このモジュールには、pathlibモジュールと同様に isfile() や exists() といった基本的なメソッドが付属しています。
それでは、例を見てみましょう。
My_file=open('file.txt')
try:
My_file.close()
print("File found!")
except FileNotFoundError:
print("Files couldn't be opened!")
|
結果は以下の通りです。
File found!
|
- pathlib モジュールの
exists()とis_file()メソッドと同様に、os.exists()とos.isfile()もそれぞれ同様のチェックを行っています。 - 唯一の違いは、pathlibモジュールが優れたオブジェクト指向のアプローチを導入し、パスを(osモジュールの場合)文字列ではなく、パスオブジェクトとして扱うという点です。
この記事もチェック:Pythonのfpdfモジュールを使って文字列やファイルをPDFに変換する方法
3.例外処理を利用する
それでは、Python でファイルが存在するかどうかを例外を使ってチェックする方法をいくつか見てみましょう。
今回は、ビルトインの open() 関数を使ってファイルを開き、例外が発生するかどうかを調べます。
例外が発生すると、ファイルが存在しないかアクセスできないことを確認できます。
try:
My_file=open('no-file.txt')
My_file.close()
print("File found!")
except FileNotFoundError:
print("Files couldn't be opened!")
|
結果は以下の通りです。
try:
My_file = open('no-file.txt')
My_file.close()
print('File is found!')
except IOError:
print('IOError encountered!')
|
- 上記のコードでは、file.txtがシステム内に存在するので、
FileNotFoundErrorは発生せず、ファイルは正常にクローズされます。
再度、file.txtが存在しない場合、以下のようになります。

出力されます。

- このように、ファイルが見つからないときは例外
FileNotFoundErrorが発生することがよくわかります。
さらに、同じタスクは IOError でも実現できます。
これは、オープンされているファイルがプログラムから読み取り可能かどうかをチェックします。
例えば、次のようなコードを考えてみましょう。

結果は以下の通りです。
