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

Python でファイルを読み込んだり、書き出したりするときに、既に同名のファイルが存在するかどうか確認したい時が多々あります。

そのような時は、ここで解説する os.path.exists() 関数を使います。このページでは、この関数の使い方と、これを使った応用のコード例も用意しています。ぜひ参考にして頂ければと思います。

目次

1. os.path.exists() でファイルが存在を確認する

open() 関数は、存在しないファイルを読み込みモード “r” で開こうとすると、以下のようにエラーになります。

In [1]:
open("unexistedfile", "r")
---------------------------------------------------------------------------
FileNotFoundError                         Traceback (most recent call last)
<ipython-input-1-75ae3217207f> in <module>()
----> 1 open("unexistedfile", "r")
FileNotFoundError: [Errno 2] No such file or directory: 'unexistedfile'

これは、書き出しモード “w” では発生しませんが、書き出して保存しようとしたファイルと同じ名前のファイルがあった時に、そのまま上書きして良いのか確認する必要がありますね。

そのような時に、既に、指定の場所に、指定のファイルやフォルダが存在するかどうかを確認するには、 os モジュールの path.exists() 関数を使います。モジュールについては、「Pythonのモジュールについて抑えておくべき知識とよく使うもの一覧」をご確認ください。

次のコードをご覧ください。ファイルやフォルダが存在する場合は True を、存在しない場合は False を返します。

In [1]:
'''os モジュールをインポートします。'''
import os
 
'''指定のパスに sample.txt が存在するかを確認します。'''
os.path.exists("./sample.txt") #カレントディレクトリにあるかどうかを確認する場合は、 ドット(.)をつけます。
Out[1]:
True

ここで注目して頂きたいのは、カレントディレクトリ(現在使っているフォルダ下)にあるかどうかを確認するには、ファイル名やフォルダ名の前に、ドット(.)をつけるだけで良いという点です。

ファイルが存在しない場合は False を返します。以下をご覧ください。

In [2]:
'''同名のファイルが存在しない場合は False を返します。'''
os.path.exists("./unexisted.txt")
Out[2]:
False

ファイルパスを絶対パス(省略形ではなく完全な住所)で指定する場合は、ドット(.) は不要です。

In [3]:
'''絶対パスで確認する場合は、ドット(.)は不要です。'''
os.path.exists("/Users/moriyamahiroaki/hello_world.txt") 
Out[3]:
True

簡単ですね。

2. ファイルの存在を確認してから操作を行う

os.path.exists() 関数を使うと様々な操作を行うことができます。少しだけ紹介しておきますね。

次のコードは、example という名前のフォルダが存在する場合に、sample.txt ファイルを書き出すものです。 

In [1]:
'''os モジュールをインポートします。'''
import os
 
'''フォルダが存在する場合'''
if os.path.exists("./example/"): #カレントディレクトリに example フォルダが存在する場合。
    with open("./example/sample.txt", "w") as fileobj:
        fileobj.write("I am brave.")
        print("ファイルを保存しました。")
else: #カレントディレクトリに exapmle フォルダが存在しない場合
    print("フォルダが存在しません。")    
ファイルを保存しました。

これを少し発展させると、同名のファイルが存在する場合には、上書きして良いかどうかを聞かれ、「はい」と答えた場合にのみ、上書きするようなコードを書くことができます。

以下がそれです。

In [2]:
newtext = "I am who I'm meant to be."
 
'''ファイルが存在する場合に上書きするかどうかを聞く'''
if os.path.exists("./example/sample.txt"): 
    while True:
        answer = input("上書きしますか? (はい/いいえ)")
        if answer == "はい":
            with open("./example/sample.txt", "w") as fileobj:
                fileobj.write(newtext)
                print("ファイルを上書きしました。")
            break
        elif answer == "いいえ":
            break
else:
    print("フォルダが存在しません。")
上書きしますか? (はい/いいえ)はい
ファイルを上書きしました。

while 文や if 文については、「Pythonのwhileを使った繰り返しまとめ」や「Pythonのifを使った条件分岐まとめ」でご確認ください。

3. まとめ

ファイルが存在するかどうかを確認するには、os.path.exists() 関数を使います。この関数の引数には、ファイルパスを入力します。ファイルパスの入力間違えをしないように注意しましょう。また、ファイルだけでなく、フォルダが存在するかどうかも、全く同じ方法で確認することができます。

ぜひ、使いこなしてくださいね。

Python初心者におすすめのプログラミングスクール

「未経験からでもPythonを学べるプログラミングスクールを探しているけど、色々ありすぎてわからない」なら、次の3つのプログラミングスクールから選んでおけば間違いはありません。

Aidemy Premium:全くの初心者ができるだけ効率よく短期間で実務的に活躍できるAI人材になることを目的とした講座。キャリアカウンセリングや転職エージェントの紹介などの転職支援も充実しており、受講者の転職成功率が高い。

AIジョブカレPythonの基本をおさえた人が、実際に機械学習やディープラーニングを活用できるようになるための講座。転職補償型があるなどキャリア支援の内容が非常に手厚く、講師の質も最高クラス。コスパ最高。Python初心者用の対策講座もある。

データミックスプログラミング経験者のビジネスマンが、更なるキャリアアップのためにデータの処理方法を学んでデータサイエンティストになるための講座。転職だけでなく起業やフリーランスとして独立する人も多い。Python初心者用の対策講座もある。

特に、あなたが以下のような目標を持っているなら、この中から選んでおけば間違いはないでしょう。

・未経験からPythonエンジニアとして就職・転職したい
・AIエンジニアやデータサイエンティストとしてキャリアアップしたい
・起業やフリーランスを視野に入れたい

理由は「Python初心者のためのおすすめプログラミングスクール3選」で解説しています。



よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

コメント

コメントする

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください

目次
閉じる