[解決!Python]Path.existsメソッドを使ってパスが存在するかどうかを確認するには:解決!Python
pathlibモジュールのPathクラスが持つexistsメソッドを使って、パスが実際に存在するディレクトリやファイルを参照しているかを確認する方法を紹介する。
from pathlib import Path
mydir = Path('mydir')
myfile = Path('myfile.txt')
nofile_or_dir = Path('nofile_or_dir')
# mydirディレクトリとmyfile.txtファイルを作成
mydir.mkdir(exist_ok=True)
myfile.touch()
# existsメソッドはパスがディレクトリやファイルを指していればTrueを返す
print(mydir.exists()) # True
print(myfile.exists()) # True
print(nofile_or_dir.exists()) # False
# ディレクトリが存在しなければ作成する
if not mydir.exists(): # d.mkdir(exist_ok=True)
mydir.mkdir()
# ファイルが存在していればバックアップを取ってから書き込みを行う
if myfile.exists():
myfile.rename(myfile.stem + '.bak')
myfile.write_text('some text')
# 指定されたファイル/ディレクトリの存在確認の後、処理を振り分ける
def do_some_work(path):
if not path.exists():
res = input(f'{path} not exists. create it? (y/n)')
if res == 'y':
path.touch()
if path.is_dir():
print(f'{path} is a directory')
elif path.is_file():
print(f'{path} is a file')
else:
print(f'{path} is not a directory nor file')
paths = [mydir, myfile, nofile_or_dir]
for path in paths:
do_some_work(path)
Pathクラスのexistsインスタンスメソッド
pathlibモジュールのPathクラスにはexistsインスタンスメソッドが備わっている。existsメソッドは対象となるPathクラスのインスタンスがディレクトリかファイルを指していればTrueを、そうでなければFalseを返す(引数はない)。
以下に例を示す。
from pathlib import Path
mydir = Path('mydir')
myfile = Path('myfile.txt')
nofile_or_dir = Path('nofile_or_dir')
# mydirディレクトリとmyfile.txtファイルを作成
mydir.mkdir(exist_ok=True)
myfile.touch()
# existsメソッドはパスがディレクトリやファイルを指していればTrueを返す
print(mydir.exists()) # True
print(myfile.exists()) # True
print(nofile_or_dir.exists()) # False
この例では、最初にPathクラスをインポートした後で、mydirディレクトリとmyfile.txtファイルを作成している(ディレクトリの作成については「ディレクトリを作成/削除するには:pathlibモジュール編」を、ファイルの作成については「ファイルを作成/削除するには」を参照のこと)。
最後の3行では存在しないパス「nofile_or_dir」への参照を含む、3つのPathクラスのインスタンスについてexistsメソッドを呼び出している。mydirディレクトリとmyfile.txtファイルは存在しているのでTrueが、nofile_or_dirについてはそのようなディレクトリもファイルも存在していないのでFalseが返される。
このメソッドは例えば、ユーザーが指定したり、設定ファイルから読み出したりしたパスが実際に存在するかどうかを確認してから、何らかの処理を行う場合に使える。
Copyright© Digital Advantage Corp. All Rights Reserved.