こんにちは。ナミレリです。Pythonメモのコーナーです。
Pythonでプログラミングしているときによく使うけれど忘れがちでここまで出かかってるけど思い出せないようなコードを自分用にメモしていきます。
今回はPythonでファイルやディレクトリの存在確認を行う際に用いる標準ライブラリの「os.path」モジュールのいくつかのモジュールについてのメモです。
この記事はこんな人にオススメ
- Pythonでファイルの存在確認をしたい
- Pythonでディレクトリの存在確認
ファイルやディレクトリの内容を読み込んだりまたは書き込みする前に、そのファイルやディレクトリの存在確認をすることはとても重要ですね。
この記事でわかること
- ファイルまたはディレクトリの存在確認(os.path.exists)の方法
- ファイルの存在確認(os.path.isfile)の方法
- ディレクトリの存在確認(os.path.isdir)の方法
- M2 MacBook Air 13.6 インチ
- macOS Monterey 12.5
- Python 3.9.7
目次
Pythonでファイルやディレクトの存在確認する
ファイルやディレクトリの内容を読み込んだりまたは書き込みする前に、そのファイルやディレクトリの存在確認をすることはとても重要ですね。
例えば、
ディレクトリAに画像Aを保存したい場合に、ディレクトリAがあったら保存する。ディレクトリAがなかったらディレクトリAを作成して画像Aを保存する。
というような処理を行うことができます。
というわけで、今回は「ファイルやディレクトリの存在確認をする」よく使うけれど忘れがちなPythonのテーマで紹介します。
使うライブラリやモジュールについて
前提条件
今回は下のようなディレクトリとファイルでテストしてみます。
py_os_pathというディレクトリにa.txt、a_link.txt、b_link.txtの3つのファイルが存在します。a_link.txtはa.txtへのシンボリックリンク。b_link.txtはb.txtへのシンボリックリンクですが参照元であるb.txtは存在しない、という環境だとします。
少しわかりにくいですが、treeやlsで確認すると下のような状態です。
ファイルまたはディレクトリの存在確認(os.path.exists)
Pythonで存在確認は、標準ライブラリos.pathモジュールのexistsメソッドを用います。
ファイルやディレクトリのパスが存在する場合はTrueを返し、存在しない場合はFalseを返します。シンボリックリンクの場合はリンクが壊れている場合はFalseを返します。
os.path.exists
import os
# py_os_path
path_1 = '/Users/test/blog/py_os_path/'
result_1 = os.path.exists(path_1)
print(result_1) # py_os_pathは存在するディレクトリなのでTrueが返る
# a.txt
path_2 = '/Users/test/blog/py_os_path/a.txt'
result_2 = os.path.exists(path_2)
print(result_2) # a.txtは存在するファイルなのでTrueが返る
# a_link.txt
path_3 = '/Users/test/blog/py_os_path/a_link.txt'
result_3 = os.path.exists(path_3)
print(result_3) # a_link.txtの参照元であるa.txtが存在するのでTrueが返る
# b_link.txt
path_4 = '/Users/test/blog/py_os_path/b_link.txt'
result_4 = os.path.exists(path_4)
print(result_4) # b_link.txtの参照元であるb.txtが存在しないのでFalseが返る
ファイルの存在確認(os.path.isfile)
ファイルの存在確認は、標準ライブラリos.pathモジュールのisfileメソッドを用います。
ファイルのパスが存在する場合はTrueを返し存在しない場合はFalseを返します。シンボリックリンクの場合はその参照元を辿り存在すればTrueを返し、存在しなければFalseを返します。
os.path.isfile
import os
# ディレクトリ
path_1 = '/Users/test/blog/py_os_path/'
result_1 = os.path.isfile(path_1)
print(result_1) # py_os_pathはファイルではなくディレクトリなのでFalseが返る
# a.txt
path_2 = '/Users/test/blog/py_os_path/a.txt'
result_2 = os.path.isfile(path_2)
print(result_2) # a.txtは存在するのでTrueが返る
# b_link.txt
path_3 = '/Users/test/blog/py_os_path/b_link.txt'
result_3 = os.path.isfile(path_3)
print(result_6) # b_link.txtの参照元であるb.txtが存在しないのでFalseが返る
ディレクトリの存在確認(os.path.isdir)
次に、ディレクトリの存在確認です。ディレクトリの存在確認はPythonでは標準ライブラリos.pathモジュールのisdirメソッドを用います。
ディレクトリのパスが存在する場合はTrueを返し存在しない場合はFalseを返します。シンボリックリンクの場合はその参照元を辿り存在すればTrueを返し、存在しなければFalseを返します。
os.path.isdir
import os
# ディレクトリ
path_1 = '/Users/test/blog/py_os_path/'
result_1 = os.path.isdir(path_1)
print(result_1) # py_os_pathは存在するディレクトリなのでTrueが返る
# a.txt
path_2 = '/Users/test/blog/py_os_path/a.txt'
result_2 = os.path.isdir(path_2)
print(result_2) # a.txtはファイルなのでFalseが返る
応用
標準ライブラリos.pathモジュールのexists、isfile、isdirの3つのメソッドを紹介しました。冒頭に記載した次のような環境で、簡単な応用をしてみます。
ディレクトリimgにtest.jpgを保存する。
ディレクトリimgの存在確認し、ディレクトリimgがなければディレクトリを作成してtest.jpgを保存する。
matplotlibでグラフ画像を作成して保存する場合を想定してみます。
ちなみに、ディレクトリを作成するには標準ライブラリosモジュールのmakedirsメソッドを使います。
import os
import matplotlib.pyplot as plt
save_dir = '/Users/test/blog/py_os_path/img/'
file_name = 'test.jpg'
if not os.path.exists(save_dir):
os.makedirs(save_dir)
plt.savefig(save_dir + file_name)
plt.close()
最後に
最後まで読んでいただきありがとうございます。Pythonはプログラム言語としてシンプルに作られていてとても覚えやすい言語です。業務で本格的に使うこともできす。データサイエンスや人工知能などのワクワクする分野ではほとんどPythonが使われているようです。MacでPythonの開発環境を整えて、その環境でPythonを学び勉強することはとても楽しいです。この記事が少しでもお役に立つと幸いです。
MacやLinux、Pythonなど技術系のkindle本も豊富にあります。詳しくはこちらから。
Amazonの電子書籍読み放題サービス「Kindle Unlimited」でプライム会員を対象に、最初の3か月間を無料体験できるキャンペーンを実施中。マンガ、小説、ビジネス書、雑誌など500万冊から、好きな本を何冊でも読めるキャンペーンです。
初めてkindle unlimited 読み放題をご利用の方は30日間の無料で体験できます。
期間終了後は月額980円で、いつでもキャンセルできます。
200万冊以上が読み放題。お好きな端末で利用可能です。