Python でファイルを読み込んだり、書き出したりするときに、既に同名のファイルが存在するかどうか確認したい時が多々あります。
そのような時は、ここで解説する os.path.exists() 関数を使います。このページでは、この関数の使い方と、これを使った応用のコード例も用意しています。ぜひ参考にして頂ければと思います。
1. os.path.exists() でファイルが存在を確認する
open() 関数は、存在しないファイルを読み込みモード “r” で開こうとすると、以下のようにエラーになります。
open("unexistedfile", "r")
これは、書き出しモード “w” では発生しませんが、書き出して保存しようとしたファイルと同じ名前のファイルがあった時に、そのまま上書きして良いのか確認する必要がありますね。
そのような時に、既に、指定の場所に、指定のファイルやフォルダが存在するかどうかを確認するには、 os モジュールの path.exists() 関数を使います。モジュールについては、「Pythonのモジュールについて抑えておくべき知識とよく使うもの一覧」をご確認ください。
次のコードをご覧ください。ファイルやフォルダが存在する場合は True を、存在しない場合は False を返します。
'''os モジュールをインポートします。'''
import os
'''指定のパスに sample.txt が存在するかを確認します。'''
os.path.exists("./sample.txt") #カレントディレクトリにあるかどうかを確認する場合は、 ドット(.)をつけます。
ここで注目して頂きたいのは、カレントディレクトリ(現在使っているフォルダ下)にあるかどうかを確認するには、ファイル名やフォルダ名の前に、ドット(.)をつけるだけで良いという点です。
ファイルが存在しない場合は False を返します。以下をご覧ください。
'''同名のファイルが存在しない場合は False を返します。'''
os.path.exists("./unexisted.txt")
ファイルパスを絶対パス(省略形ではなく完全な住所)で指定する場合は、ドット(.) は不要です。
'''絶対パスで確認する場合は、ドット(.)は不要です。'''
os.path.exists("/Users/moriyamahiroaki/hello_world.txt")
簡単ですね。
2. ファイルの存在を確認してから操作を行う
os.path.exists() 関数を使うと様々な操作を行うことができます。少しだけ紹介しておきますね。
次のコードは、example という名前のフォルダが存在する場合に、sample.txt ファイルを書き出すものです。
'''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("フォルダが存在しません。")
これを少し発展させると、同名のファイルが存在する場合には、上書きして良いかどうかを聞かれ、「はい」と答えた場合にのみ、上書きするようなコードを書くことができます。
以下がそれです。
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() 関数を使います。この関数の引数には、ファイルパスを入力します。ファイルパスの入力間違えをしないように注意しましょう。また、ファイルだけでなく、フォルダが存在するかどうかも、全く同じ方法で確認することができます。
ぜひ、使いこなしてくださいね。
コメント