
photo credit: manoftaste.de Bureaucracy / Bürokratie III via photopin (license)
みなさん、こんにちは!
タカハシ(@ntakahashi0505)です。
初心者向けにフォルダ操作をする便利ツールを作りながらPythonプログラミングを学ぶシリーズをお送りしています。
前回の記事はこちら。
リストを使ってデータをまとめて取り扱う方法とリストに対するforループによる繰り返し処理の作り方についてお伝えしました。
さて、これまでフォルダを作成する方法を少しずつパワーアップしてきているわけですが、作ろうとしているフォルダが既に存在している場合、Pythonではエラーをはいて終了してしまいます。
そういうことも実務ではありますもんね。
ですので、それを避ける方法を考えていかないといけません。
その手始めとして、今回はPythonで指定したフォルダが存在しているかどうかを調べる方法をお伝えします。
os.path.existsという関数を使えば一発です。
では、行ってみましょう!
前回のおさらいと課題
では、まずは前回のおさらいからです。
前回作成したプログラムはこちらです。
import os areas = ['10_アフリカ', '20_アメリカ', '30_アジア', '40_ヨーロッパ', '50_オセアニア'] for area in areas: os.mkdir(area)
作りたい複数のフォルダ名をリストとして与えて、それに対してforループを回して、作業フォルダにフォルダを作成するという内容ですね。
非常にシンプルながらも、なかなか使いどころがありそうですが、一点問題があります。
作ろうとしているフォルダが既に存在している場合、エラーになってしまうのです。
やってみましょうか。こんなエラーが出ます。
FileExistsError: [WinError 183] 既に存在するファイルを作成することはできません。: ’10_アフリカ’
とってもわかりやすくてありがたいエラーメッセージです。
これをなんとか回避するのが当面の目標です。
フォルダの存在有無を確認する方法
Pythonはこの悩みも簡単に解決してくれます。
これまで愛用してきた標準ライブラリのosモジュールですが、その中にファイル名やパスを操作するスペシャルなたくさんの関数で構成されているos.pathモジュールが含まれています。
そのos.pathモジュール内のexists関数を使うと、指定のフォルダやファイルが存在するかどうかを確認することができます。
指定のフォルダの存在有無を確認できれば、それを条件にして
- 存在しているときはフォルダを作らない
- 存在していないときはフォルダを作る
といった分岐処理を作ってあげれば、今回の課題をクリアできるようになります。
os.path.exists関数の使い方
では、os.path.exists関数の使い方をみてみましょう。
pathには相対パスか絶対パスを指定できますが、作業フォルダ内であればフォルダ名のみでOKです。
では、試しに使ってみましょう。
まず、os.pathモジュールをインポートする必要がありますが、os.pathモジュールはosモジュールに含まれているので、osモジュールをインポートしていればそれでOKです。
それで、作業フォルダに以下のフォルダが作られているとします。
この状態で、以下のコードを実行してみようというわけです。
import os print(os.path.exists('10_アフリカ')) print(os.path.exists('99_南極'))
実行するとShellウィンドウに以下のように出力されました。
「10_アフリカ」は既にフォルダが存在しています。それに対してos.path.exists(’10_アフリカ’)の出力は「True」です。
「99_南極」はフォルダが存在していません。そして、os.path.exists(’99_南極’)の出力は「Flase」です。
つまり、exists関数は指定したフォルダやファイルが存在していればTrue、存在していなければFalseという値を返します。
ブール型とは
os.path.exists関数の結果として出力されたTrue、Falseはブール型とよばれるデータです。
ブール型はTrue、Falseの2種類の値しかなく、それぞれ以下のような意味をもっています。
- True:成立している、ある、Yesなど
- False:成立していない、ない、Noなど
ある特定の条件の結果として、それがTrueなのかFalseなのかによって、処理の分岐を行ったり、繰り返しを続行するかどうかを決めたり、といった使い方をします。
実際に、どのようにブール型を活用するのか…そのあたりは次回のお楽しみにですね。
まとめ
以上、Pythonで指定したフォルダの有無を調べるos.path.exists関数の使い方についてお伝えしました。
また、ブール型とは何かということについても簡単に触れました。
次回そのブール型を使って、処理を分岐するif文の使い方についてお伝えしますね。
どうぞお楽しみに!