ディレクトリ、ルートディレクトリ、カレントディレクトリ、絶対パス、相対パス。こんなことは、Windowsでは気にする必要がありません。でも、プログラムを組んでいると、時々、その知識が必要な時があります。ここでは、絶対パスと相対パスを使って、ファイルやフォルダの位置を指定できるようにしたいと思います。
0.チュートリアル学習のポイントシリーズ
この記事は「Pythonチュートリアルのポイント整理シリーズ」の記事です。一連の記事は、以下のリンク集を参照してください。
「Pythonチュートリアル」のポイント整理シリーズ
1.「ディレクトリ」とは
まず、「ディレクトリ」ってなんでしょうか。実は現在のWindowsでは「フォルダ」のことです。昔のWindowsやWindowsよりも古いOSであるMS-DOSでは「フォルダ」とは呼ばず、「ディレクトリ」と呼んでいました。厳密には違いがあるようですが、「ディレクトリ」=「フォルダ」と考えても問題ありません。
2.「親ディレクトリ」「サブディレクトリ」
下の図を見てください。私のハードディスク(Cドライブ)には、「01_pytyon」「Brother」など、16個のフォルダ(ディレクトリ)があります。また、図の左側を見ると、「01_pytyon」の中に3つのフォルダ「game1」「game2」「game3」が入っており、さらに、フォルダ「game2」の中には2つのフォルダ「data2_human」「data2_monster」が入っており、フォルダ「game3」の中には2つのフォルダ「data3_human」「data3_monster」が入っています。
さて、この例ではディレクトリgame2から見て1つ上のディレクトリ01_pythonをgame2の「親ディレクトリ」と呼び、game2から見て下にある全てのディレクトリdata2_human、data2_humanを、game2の「サブディレクトリ」と呼びます。
なお、01_pythonのサブディレクトリはgame1, game2, game3だけではなく、data2_human, data2_monster, data3_human, data3_monsterもサブディレクトリです。
3.「ルートディレクトリ」
ハードディスクの中には様々なディレクトリが存在しますが、一番上のディレクトリのことを特に「ルートディレクトリ」といいます。
ただし、下の図でルートディレクトリとは、01_pythonやBrotherではなく、これら16個のディレクトリが入っているハードディスクそのものが1番上のディレクトリです。
つまり、下の図ではハードディスクであるCドライブのルートディレクトリには、01_pythonやBrotherといった16個のサブディレクトリが存在します。また、逆に言えば01_pythonやBrotherの親ディレクトリがルートディレクトリです。
4.「カレントディレクトリ」
「カレントディレクトリ」とは「作業フォルダ」とも呼ばれることもあり、名前の通りプログラムが作業を行うディレクトリ(フォルダ)の事です。
でも、「プログラムが作業を行うディレクトリ」といわれても、分かりにくい人が多いのではないかと思います。
そこで、例えばあなたが自作のPythonゲームを作って、フォルダgame1に「ゲームプログラム:game1.py」と「画像データ:monster_a.jpg等」のファイルを入れた場合を考えてみます。
なお、このプログラムではgame1.pyからモンスターの画像monster_a.jpgを呼び出すようにコーディングされています。
ところが、game1.pyからmonster_a.jpgを呼び出した時に、もし、他のディレクトリにも同じ名前のmonster_a.jpgが入っていたらどうでしょうか。どのmonster_a.jpgを呼び出して良いのかわからなくなってしまいます。
これを解決するために、Windowsではプログラムごとに「プログラムが作業を行うディレクトリ」を指定することになっており、このディレクトリを「カレントディレクトリ」といいます。
そして、基本的にはプログラムはカレントディレクトリ以外のファイルを実行できないことになっているのです。
なお、特に指定しなければメインのプログラムが入っているフォルダがカレントディレクトリになります。
つまり、プログラムgame1.pyのカレントディレクトリはgame1ですから、game1.pyからは、ディレクトリgame1以外のデータにアクセスできません。だから、他のディレクトリに同名のファイルがあったとしても、カレントディレクトリのmonster_a.jpgを呼び出すことができるのです。
5.カレントディレクトリの外のファイルの呼び出し
それでは、カレントディレクトリの外のファイルを呼び出したいときには、どうしたらよいのでしょうか。
(1) 「絶対パス」で指定する方法
1つ目の方法は、ファイルの位置を「パス」で直接指定する方法です。「パス」とはファイルが入っているディレクトリの位置を示す住所のようなもので、1番上のルートディレクトリからの位置を指定するパスを「絶対パス」といいます。
さて、今度はgame2.pyをディレクトリgame2に入れ、モンスターの画像monster_a.jpgをディレクトリdata2_monsterに入れてみましょう。
この場合は、game2.pyの中で、c:\01_python\game2\data2_monster\monster_a.jpgと具体的に指定すれば、カレントディレクトリの外にあるmonster_a.jpgでも実行することができます。
「C:\01_python\game2\data2_monster\monster_a.jpg」とは、[cドライブ]の[ルートディレクトリ]の中の[01_python]の中の[game2]の中の[data2_monster]の中のファイルmonster.jpgという意味です。そして、「c:\01_python\game2\data2_monster\」の部分がmonster.jpegの「絶対パス」です。
なお、「C:」の部分は省略が可能ですが、他のドライブ(例えばDドライブ)からCドライブにアクセスしたい場合は省略することはできません。
また、「\」は、フォントによっては表示が円マーク「¥」であったり、バックスラッシュ「\」であったりしますが、フォントによる表記の違いだけですので同じものです。「/」スラッシュではないので注意してください。
(2) 「相対パス」で指定する方法
2つ目の方法は「相対パス」で指定する方法です。「相対パス」とはカレントディレクトリからの相対的な位置を指定するパスのことです。
カレントディレクトリ「.」
そして、カレントディレクトリは「.」と表記します。
では、先ほどと同様、game2.pyはディレクトリgame2、勇者の画像monster_a.jpgはdata2_monsterに入っているとします。
この場合は、game2.pyから、.\data2_monster\monster_a.jpgと指定すれば、カレントディレクトリの外にあるmonster_a.jpgを実行できます。1番最初の「.」の部分がカレントディレクトリgame2のパス「c:\01_python\game2」を示します。
ところで、実はカレントディレクトリを示す「.」は、明示したい場合を除き、省略可能です。例えば「.\bbb1\yuusya.jpeg」は「bbb1\yuusya.jpeg」と表記できます。なお、間違えて「\bbb1\yuusya.jpeg」としてしまうと最初の「\」がルートディレクトリとして判断されてしまいます。
さて、絶対パスで指定した場合は、例えばこのゲームをインストールするとき、いつもgame2.pyをルートディレクトリから見て同じ位置に入れる必要があります。
しかし、相対パスで指定した場合は、カレントディレクトリが基準になるので、game2.pyをどこインストールしても、game2.pyの1つ下のディレクトリdata2_monsuterにmonster_a.jpgが入っていれば、モンスターの画像データを呼び出すことができます。
親ディレクトリ「..」
なお、親ディレクトリは「..」と表記します。そして「.」や「..」を使えば、「..\game1\monster_a.jpg」とか「..\..\Brother\monster_a.jpg」のように、カレントディレクトリを基準として、あらゆる場所のディレクトリの位置を「相対パス」で指定することができます。「..\」はカレントディレクトリの親ディレクトリ01_pythonのことですし、「..\..\」は親ディレクトリの親ディレクトリ、つまり、ルートディレクトリのことです。
また、「..\game1\monster_a.jpg」は「.\..\game1\monster_a.jpg」とも記述できますが、最初の「.\」は省略できます。
(3) 「パスを通す」方法
ファイルの指定は、ここまでの説明のように、絶対パスや相対パスで指定することができます。しかし、ディレクトリの階層が深くなると、パスは階層の深さに応じてパスが長くなり、記述するのが大変です。そこで、Windowsにはパスを省略できる機能があります。それが「パスを通す」方法です。
ディレクトリの絶対パスをパソコンの「環境変数PATH」に登録することを「ディレクトリにパスを通す」といいます。ディレクトリにパス(PATH)を通すことで、パスを通したディレクトリのファイルは、まるでカレントディレクトリであるかのように扱うことができます。
つまり、パスを通したディレクトリのファイルはパスを省略できます。
5. まとめ
(1) ディレクトリ
「ディレクトリ」は、ハードディスクなどの記憶装置の保存場所を示す箱のようなもので、ディレクトリの中にファイルやディレクトリを作ることができます。Windowsの「フォルダ」のことです。
厳密には「ディレクトリ」と「フォルダ」は同じではありませんが、ほぼ同じです。
(2) ルートディレクトリ
ハードディスクなどの記憶装置の中には、ディレクトリ(フォルダ)を作ることができ、ディレクトリの中にもディレクトリを作ることができます。1番上の階層を「ルートディレクトリ」といい、例えばハードディスクではハードディスクドライブ自体がルートディレクトリであると考えると分かりやすいです。
なお、「ルートフォルダ」とはいいません。
(3) 親ディレクトリ
カレントディレクトリの1つ上の階層のディレクトリを「親ディレクトリ」といいます。
(4) サブディレクトリ
カレントディレクトリより下の階層の全てのディレクトリを「サブディレクトリ」といいます。
(5) カレントディレクトリ
プログラムを動かす上で、現在、どのディレクトリの中で作業をしているのかが重要です。プログラムが作業を行うディレクトリのことを「カレントディレクトリ」といいます。
(6) カレントディレクトリのファイルの実行
カレントディレクトリ内のファイルを実行するときは、ファイル名だけで実行できます。
(7) パス、絶対パス、相対パス
パスとはハードディスクなどの記憶装置の中のディレクトリ(フォルダ)やファイルの位置を示す文字列のことで、ルートディレクトリからの位置を示す「絶対パス」と、カレントディレクトリからの位置を示す「相対パス」があります。
(8) パスを通す
パス(PATH)を通すことにより、パスを通したディレクトリ内のファイルはファイル名だけで実行できます。
私が実際に購入した教材のご紹介
以下、私が実際に購入したPythonの教材をまとめてみました。 Pythonを学習する上で、少しでもお役に立つことができればうれしいです。
・Python♪私が購入したPythonの書籍のレビュー
・UdemyのPythonの動画講座を書籍を買う感覚で購入してみた
その他
液晶ペンタブレットを買いました
(1) モバイルディスプレイを買うつもりだったのに激安ペンタブレット購入
以下、私が光回線を導入した時の記事一覧です。
(1) 2020年「光回線は値段で選ぶ」では後悔する ←宅内工事の状況も説明しています。
(2) NURO光の開通までWiFiルーターを格安レンタルできる
(3) NURO光の屋外工事の状況をご紹介。その日に開通!
(4) 光回線開通!実測するとNURO光はやっぱり速かった
(5) ネット上のNURO光紹介特典は個人情報がもれないの?