Pythonでpathlibを使ってファイルが存在するかどうかを確認する方法

スポンサーリンク
スポンサーリンク

イントロダクション

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のパスはディレクトリではないので、上記のような出力が得られます。

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モジュールの場合)文字列ではなく、パスオブジェクトとして扱うという点です。

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が存在しない場合、以下のようになります。

Pathlib Output
pathlib Output

出力されます。

Os Path Output
os.path Output
  • このように、ファイルが見つからないときは例外 FileNotFoundError が発生することがよくわかります。

さらに、同じタスクは IOError でも実現できます。

これは、オープンされているファイルがプログラムから読み取り可能かどうかをチェックします。

例えば、次のようなコードを考えてみましょう。

File Not Found Exception
FileNotFoundError Exception

結果は以下の通りです。

IOError
IOError
タイトルとURLをコピーしました