Python♪ディレクトリ、カレントディレクトリ、絶対パス、相対パス

 ディレクトリ、ルートディレクトリ、カレントディレクトリ、絶対パス、相対パス。こんなことは、Windowsでは気にする必要がありません。でも、プログラムを組んでいると、時々、その知識が必要な時があります。ここでは、絶対パスと相対パスを使って、ファイルやフォルダの位置を指定できるようにしたいと思います。

1.「ディレクトリ」とは

 まず、「ディレクトリ」ってなんでしょうか。実は現在のWindowsでは「フォルダ」のことです。昔のWindowsやWindowsよりも古いOSであるMS-DOSでは「フォルダ」とは呼ばず、「ディレクトリ」と呼んでいました。ですから「ディレクトリ」=「フォルダ」と考えても問題ありません。厳密には様々な違いがありますが、ここでは説明しません。

2.「ルートディレクトリ」「カレントディレクトリ」「パス」「絶対パス」「親ディレクトリ」「サブディレクトリ」

 下の図を見てください。私のハードディスク(Cドライブ)には、「01_pytyon_hp」「Brother」など、11個のフォルダ(ディレクトリ)があります。また、図の左側を見ると、「01_pytyon_hp」の中に3つのフォルダ「aaa1」「aaa2」「aaa3」が入っており、さらに、フォルダ「aaa1」の中には2つのフォルダ「bbb1」「bbb1」が入っていることが分かります。

 それでは、それぞれのフォルダ(ディレクトリ)の位置はどのように指定すればよいのでしょうか。それでは、下の図の赤丸の部分をクリックしてみます。

 

 すると、表示が変わり、「C:\」という表示に変わりました。これが、現在、作業をしているフォルダ(ディレクトリ)の位置を示す「パス」です。また、この現在、作業をしているフォルダ(ディレクトリ)のことを「カレントディレクトリ」といいます。
 なお、Cドライブには、フォルダの中にフォルダが入っていたり、様々なフォルダが存在しますが、一番上のフォルダ(ここでは、「01_pytyon_hp」「Brother」など、11個のフォルダ)が入っている場所を「ルートディレクトリ」といいます。つまり、「C:\」は、「Cドライブ  C:」の「ルートディレクトリ  \」の位置を示しています。また、「C:」の部分は省略が可能で、「\」とすることができますが、他のドライブ(例えばDドライブ)からCドライブにアクセスしたい場合は省略することはできません。
 つまり、下の図では、現在いるフォルダ「カレントディレクトリ」はCドライブの「ルートディレクトリ」であり、位置を示す「パス」は「C:\」となります。

 なお、「\」は、フォントによっては表示が円マーク「¥」であったり、バックスラッシュ「\」であったりしますが、フォントによる表記の違いだけですので同じものです。

 

 

 次に、左の図の「01_python_hp」をクリックしてみましょう。すると右の図の表示が変わり、「01_python_hp」には、「aaa1」「aaa2」「aaa3」の3つのフォルダとファイル「hello.py」が1つ入っているのが分かります。

 現在はディレクトリ「01_python_hp」の中に入っていますので、「カレントディレクトリ」は「01_python_hp」です。また、「01_python_hp」の位置を示す「パス」は、「C:\01_python_hp」となります。「C:\01_python_hp\」のように最後に「\」をつけてもかまいません。また、ファイルhello.pyを指定する場合は「C:\01_python_hp\hello.py」とします。

 なお、「ルートディレクトリ」は一番上の階層のディレクトリを示す用語ですので、「カレントディレクトリ」が変わっても、Cドライブの「ルートディレクトリ」は、「C:\」のままです。

 また、カレントディレクトリより下にある全てのディレクトリを「サブディレクトリ」といいます。「01_python_hp」のサブディレクトリは「aaa1」「aaa2」「aaa3」「bbb1」「bbb2」です。

 

 今度は、bbb1をクリックします。すると、「カレントディレクトリ」の「パス」は「C:\01_python_hp\aaa1\bbb1」となります。「bbb1」の中のファイルhello2.pyを指定するには、「C:\01_python_hp\aaa1\bbb1\hello2.py」と表記します。

 また、カレントディレクトリの1つ上のディレクトリを「親ディレクトリ」といいます。「bbb1」の親ディレクトリは「aaa1」です。

 さて、ここまで示した「C:\」「C:\01_python_hp\aaa1」「C:\01_python_hp\aaa1\bbb1」は、「ルートディレクトリ」からの位置を示した「パス」ですので、「絶対パス」といいます。

3.「相対パス」

 それに対して「カレントディレクトリ」からの位置を示した「パス」を「相対パス」といいます。相対パスの表記では、カレントディレクトリは「.」、カレントディレクトリの親ディレクトリは「..」と表現します。

 では、カレントディレクトリが「bbb1」のときに、「01_python_hp」の中のhello.pyを指定するにはどうしたらよいでしょうか。「01_python_hp」は、「bbb1」の親ディレクトリのさらに親ディレクトリですので、相対パスは「..\..\hello.py」あるいは「.\..\..\hello.py」となります。

 次に、カレントディレクトリが「01_python_hp」の時に「bbb1」の中のhello2.pyを指定するときはどうでしょうか。これは、カレントディレクトリ「01_python_hp」の中の「aaa1」の中の「bbb1」の中の「hello2.py」なので、相対パスは「aaa1\bbb1\hello2.py」「.\aaa1\bbb1\hello2.py」となります。

 実はカレントディレクトリを示す「.」は、明示したい場合を除き、省略可能ですが、「.」だけではなく、「.\」を省略します。パスの一番最初が「\」になっていると、最初の「\」がルートディレクトリとして判断されてしまい、絶対パスとして扱われます。

4. パス(PATH)の省略

 ファイルの指定は、ここまでの説明のように、絶対パスや相対パスで指定することができます。しかし、ディレクトリの階層が深くなると、パスは階層の深さに応じてパスが長くなり、記述するのが大変です。そこで、Windowsにはパスを省略する機能があります。

 

(1) パス(PATH)を通す

 ディレクトリの絶対パスをパソコンの「環境変数PATH」に登録することを「ディレクトリにパスを通す」といいます。ディレクトリにパス(PATH)を通すことで、そのディレクトリまでの経路を絶対パスから省略することができます。つまり、パスを通したディレクトリに入っているファイルは、ファイル名だけで実行できます。また、パスを通したディレクトリより下層のファイルやディレクトリを指定する場合、絶対パスを短くすることができます。

※具体的な例は用語集を参考にしてください。
用語集:「パス(PATH)を通す」「カレントディレクトリのファイルの実行」

(2) カレントディレクトリのファイルの実行

 カレントディレクトリにあるファイルや、カレントディレクトリより下層のファイルは、パス(PATH)を通した時と同様にカレントディレクトリまでの経路を絶対パスから省略することができます。つまり、カレントディレクトリにあるファイルはファイル名だけで実行でき、カレントディレクトリより下層のファイルやディレクトリを指定する場合は絶対パスを短くすることができます。
 カレントディレクトリは、まさに現在作業しているディレクトリですから、カレントディレクトリのファイルは頻繁に使用されます。ファイル名だけでファイルを指定できるのは、とても便利なのです。このように、カレントディレクトリのファイルは直接ファイル名で実行できるため、プログラムの実行では、どこがカレントディレクトリであるかが重要なのです。

5. まとめ

(1) ディレクトリ

 「ディレクトリ」は、ハードディスクなどの記憶装置の保存場所を示す箱のようなもので、ディレクトリの中にファイルやディレクトリを作ることができます。Windowsの「フォルダ」のことです。
 ハードディスクのドライブの一番上の階層であるドライブそのものは「(ルート)ディレクトリ」ですが、「フォルダ」とは呼びません。その他にも厳密には「ディレクトリ」と「フォルダ」は同じではありませんが、ここでは説明しません。

(2) ルートディレクトリ

 ハードディスクなどの記憶装置の中には、フォルダ(ディレクトリ)を作ることができ、フォルダの中にもフォルダを作ることができますが、ファイルやフォルダを作ることのできる一番上の階層を「ルートディレクトリ」といいます。

(3) カレントディレクトリ

 プログラムを動かす上で、現在、どのディレクトリの中で作業をしているのかが重要な場合があります。この現在作業をしているディレクトリのことを「カレントディレクトリ」といいます。

(4) 親ディレクトリ

 カレントディレクトリの1つ上の階層のディレクトリを「親ディレクトリ」といいます。

(5) サブディレクトリ

 カレントディレクトリより下の階層の全てのディレクトリを「サブディレクトリ」といいます。

(6) パス、絶対パス、相対パス

 ハードディスクなどの記憶装置の中のフォルダ(ディレクトリ)やファイルの位置を示す文字列のことで、ルートディレクトリからの位置を示す「絶対パス」と、カレントディレクトリからの位置を示す「相対パス」があります。

(7) ディレクトリにパスを通す

 ディレクトリにパス(PATH)を通すことにより、パスを通したディレクトリ内のファイルはファイル名だけで実行でき、下層のファイルやディレクトリを指定する場合は、パスを通したディレクトリまでの経路を絶対パスから省略することができます。

(8) カレントディレクトリのファイルの実行

 ディレクトリにパス(PATH)を通す場合と同様に、カレントディレクトリ内のファイルを実行するときは、ファイル名だけで実行でき、下層のファイルやディレクトリを指定する場合は、カレントディレクトリまでの経路を絶対パスから省略することができます。