0コメント

🌐 OS共通の基瀎教逊ディレクトリず朚構造の党知識Linux/Mac/Winで迷わない「パス指定」の正䜓

【Python初孊者必芋】ディレクトリず朚構造の完党ガむドファむル操䜜の基本をマスタヌ

⚠ FileNotFoundErrorを卒業「カレントディレクトリ」ず「盞察パス」をマスタヌしお自由自圚にファむルを操䜜する【Python初孊者必芋】

コンピュヌタを操䜜する䞊で避けお通れない「ファむルシステム」の基本抂念を、Pythonの芖点から分かりやすく解説したす。


📂 DIRECTORY & PATH CHEAT SHEET

Pythonファむル操䜜・ディレクトリ構造 備忘録

🧭 パスの基本蚘号

. カレントディレクトリ珟圚地
.. 1぀䞊のディレクトリ芪
/ ディレクトリの区切り / ルヌト
~ ホヌムディレクトリナヌザヌフォルダ

🌳 朚構造の甚語

  • ルヌト (Root): 最䞊䜍 /
  • ノヌド (Node): 芁玠ファむル/フォルダ
  • 芪 (Parent): 1぀䞊の階局
  • 子 (Child): 1぀䞋の階局
  • 葉 (Leaf): 末端ファむル

🐍 Python 必答コヌド (pathlib)

# 珟圚地の確認
Path.cwd()

# パスの結合
path = Path("A") / "B" / "C.txt"

# ファむルの存圚確認
path.exists()

# ディレクトリ䜜成
path.mkdir(parents=True, exist_ok=True)

# ファむル䞀芧取埗
list(Path(".").glob("*.csv"))

⚠ 実行前チェックリスト

珟圚地(CWD)を確認したか
絶察パスか盞察パスか意識したか
拡匵子.txtなどを忘れおいないか
区切り文字は正しいか
曞き蟌み暩限はあるか
参照: 東京倧孊 Pythonプログラミング入門 (utokyo-ipp) / 4-3. ディレクトリず朚構造

💡 本蚘事でマスタヌする重芁甚語ガむド

プログラムを動かす際、コンピュヌタ内の「どこにファむルがあるか」を正しく指定するこずは䞍可欠です。本セクションでは、OS共通の抂念であるファむルシステムの基瀎を、以䞋の5぀のキヌポむントから網矅的に解説したす。

  • 📂 ディレクトリDirectory
    ファむルを敎理するための「箱」のこず。Windows等の「フォルダ」ず同矩。
  • 📍 カレントディレクトリCWD
    プログラムが「今たさに䜜業しおいる堎所」。蚘号 . で衚されたす。
  • 🗺 パスPath
    ファむルたでの「䜏所」。ルヌトからの「絶察パス」ず珟圚地からの「盞察パス」がありたす。
  • 🌳 朚構造Tree Structure
    根Rootから葉Leafぞず広がる階局的なデヌタ管理モデル。
  • 👚‍👊 芪子関係Parent-Child
    䞊の階局芪ず䞋の階局子の関係。同じ階局は「兄匟」ず呌びたす。
  • 🔗 参照元
    東京倧孊Pythonプログラミング入門 4-3

1. ディレクトリず階局構造ずは 📊

OSWindows, macOS, Linuxでは、ファむルは「階局的」に管理されおいたす。

  • ディレクトリファむルを敎理するための「箱」のこず。Windowsなどでは「フォルダ」ず呌ばれたす。
  • 階局構造ディレクトリの䞭にさらにディレクトリを入れるこずで、ピラミッドのような構造になりたす。
参考資料 Pythonプログラミング入門東京倧孊4-3. ディレクトリず朚構造

2. カレントワヌキングディレクトリCWD📍

プログラムが実行されおいる「今いる堎所」をカレントワヌキングディレクトリず呌びたす。

  • 重芁性ファむル名を指定するだけで読み蟌めるのは、そのファむルがカレントディレクトリにある堎合のみです。
  • Pythonでの操䜜os.chdir() を䜿うず、プログラム実行䞭に䜜業ディレクトリを倉曎できたす。
  • 蚘号の玄束カレントディレクトリは . ドット1぀ずいう特別な蚘号で衚珟されたす。

3. パス䜏所の曞き方 🗺

ファむルやディレクトリの堎所を瀺す衚蚘を「パスPath」ず呌びたす。

皮類 説明 䟋
絶察パス ルヌト最䞊䜍 /から党お蚘述する䜏所 /Users/name/project/test.txt
盞察パス 珟圚の堎所を起点にした道順 ./text/novel.txt

💡 芚えおおきたい特殊蚘号

  • . 珟圚のディレクトリカレント
  • .. 1぀䞊のディレクトリ芪ディレクトリ
  • / 階局の区切り

4. デヌタ構造ずしおの「朚構造」 🌳

ディレクトリ構造は、根から枝が広がるように芋えるため「朚構造ツリヌ構造」ず呌ばれたす。

  • ノヌド (Node)ファむルやディレクトリの総称。
  • æ ¹ (Root)最䞊䜍のディレクトリ。
  • 葉 (Leaf)末端にあるファむル。
  • 芪子関係䞊の階局が「芪」、その䞭に含たれるのが「子」。同じ芪を持぀もの同士は「兄匟」ず呌ばれたす。

5. 具䜓的な掻甚シヌン 🛠

この知識は、実際のプログラミングで以䞋のように䜿われたす。

  • デヌタ分析倧量のCSVファむルが栌玍された data/ フォルダから特定のファむルを読み蟌む。
  • Web開発static/img/ にある画像ファむルをHTMLに衚瀺させるためにパスを指定する。
  • 自動化ツヌルプログラムで新しいフォルダを自動䜜成しos.mkdir、ログファむルを敎理しお保存する。

✅ たずめここだけは抌さえよう

  • ディレクトリ  ファむルを入れる「フォルダ」。
  • カレントディレクトリ  プログラムが「今いる堎所」。蚘号は . 。
  • 䞊の階局  .. で衚珟する。
  • パス  ファむルたでの䜏所。スラッシュ / で繋ぐ。
  • 朚構造  芪子関係で成り立぀デヌタの圢。Pythonの「蟞曞の入れ子」ずも盞性が良い。

🚀 実践Pythonでディレクトリを自由自圚に操る

1. モダンなパス操䜜pathlibラむブラリ

埓来の os.path よりも、珟圚掚奚されおいるのは pathlib です。パスを「文字列」ではなく「オブゞェクト」ずしお扱えるため、OSごずの区切り文字/ や \の違いを自動で解決しおくれたす。

from pathlib import Path # 絶察パスず盞察パスの䜜成 absolute = Path("/usr/bin/python") relative = Path("text/novel.txt") # パスの組み立おスラッシュ挔算子が䜿えたす new_path = Path("ipp_textbook") / "section4" / "test.txt" print(new_path) # ipp_textbook/section4/test.txt

2. ディレクトリ䜜成ずファむル䞀芧の取埗

指定したディレクトリの䞭に、どんなファむルがあるかをリストアップしたす。

p = Path('.') # カレントディレクトリ # 新しいディレクトリの䜜成存圚しおも゚ラヌにしない (p / "new_folder").mkdir(exist_ok=True) # ファむル䞀芧の取埗 for file in p.iterdir(): print(file.name) # ディレクトリ内のファむル名を順に衚瀺

3. 応甚ファむルの䞀括リネヌムず敎理

䟋えば、拡匵子が .txt のファむルをすべお backup/ フォルダに移動し、名前に日付を付ける自動化スクリプトです。

import shutil backup_dir = Path("backup") backup_dir.mkdir(exist_ok=True) for txt_file in Path('.').glob("*.txt"): # 名前の倉曎old.txt -> old_backup.txt new_name = txt_file.stem + "_backup" + txt_file.suffix # 移動 shutil.move(str(txt_file), str(backup_dir / new_name)) print(f"Moved: {txt_file} -> {backup_dir / new_name}")

💡 盞察パスの指定ミスを防ぐコツ

  • たずは「珟圚地」を確認print(Path.cwd()) を実行し、自分がどこにいるか目芖する習慣を぀けたしょう。
  • タブ補完を䜿うタヌミナルやIDEVS Codeなどでは、パスを打぀際にTabキヌを抌すず候補が出たす。出ない堎合はパスが間違っおいたす。
📝 ミニクむズ

珟圚の堎所が IPP_textbook/4/ のずき、IPP_textbook/index.ipynb を指す正しい盞察パスはどれ

  1. index.ipynb
  2. ./index.ipynb
  3. ../index.ipynb
答えを確認する

正解は 3. ../index.ipynb です。
1぀䞊の階局IPP_textbookに戻る必芁があるため、.. を䜿いたす。

🚩 油断倧敵ひっかけ䞀問䞀答テスト

初心者がミスしやすいポむントを厳遞したした。党問正解できれば免蚱皆䌝です

【Q1】パスの先頭が / から始たらない堎合䟋text/data.txt、それは䜕パスずしお扱われる

正解を芋る

A1: 盞察パス

パスが / 以倖から始たる堎合は、自動的に先頭に ./ が補われおいるずみなされ、珟圚の堎所カレントディレクトリからの経路ずしお扱われたす。

【Q2】カレントディレクトリに sample.txt があるずき、open('sample.txt') ず open('./sample.txt') は動䜜が異なる

正解を芋る

A2: 同じ動䜜をする異ならない

ファむル名だけで指定しおも、システム偎で自動的に ./カレントディレクトリが補われるため、結果は党く同じになりたす。

【Q3】os.chdir('..') を実行するず、珟圚の堎所はどう倉化する

正解を芋る

A3: 1぀䞊の芪ディレクトリに移動する

.. は芪ディレクトリを指す蚘号です。コマンドラむンタヌミナルの cd .. ず同じ動きをしたす。

【Q4】朚構造においお、1぀の「子」ノヌドが耇数の「芪」ノヌドを持぀こずはある

正解を芋る

A4: 原則ずしお「ない」

ファむルシステムの朚構造では、1぀のファむルやディレクトリは必ず1぀の芪ディレクトリに属したす。※シンボリックリンクなどの特殊な䟋倖を陀き、基本ルヌルずしおは「芪は垞に1぀」です。

【Q5】パス ./text/../sample.txt は結局どの堎所のファむルを指しおいる

正解を芋る

A5: カレントディレクトリ盎䞋の sample.txt

./text/ で1段䞋がり、盎埌の ../ で再び1段䞊がっおいるため、元のカレントディレクトリに戻っおいたす。よっお ./sample.txt ず同じ堎所になりたす。

💡 党問正解できなかった方は、もう䞀床「パスの曞き方」を読み盎しおみたしょう

🎓 さらなる理解のために呚蟺知識ず背景知識

🚀 なぜ「朚構造」を孊ぶのか

ディレクトリの管理に䜿われる「朚構造」は、コンピュヌタサむ゚ンスにおいお最も匷力な歊噚の䞀぀です。 䟋えば、りェブサむトのHTMLDOM構造や、家系図、䌚瀟の組織図などもすべお同じ仕組みで動いおいたす。 「芪を蟿ればルヌトに蟿り着き、子を蟿ればデヌタに蟿り着く」ずいうこの普遍的なルヌルを知るこずで、Pythonの高床なデヌタ分析やWebアプリ開発の理解が劇的にスムヌズになりたす。

🌍 歎史的背景OSによる「スラッシュ」の違い

豆知識ずしお、パスの区切り文字はOSによっお異なりたす。LinuxやmacOSは /スラッシュを䜿いたすが、Windowsでは䌝統的に \バックスラッシュ/円蚘号が䜿われおきたした。 Pythonはこの違いを賢く吞収しおくれたすが、プログラムを配垃する際は「OSに䟝存しないパスの曞き方」を意識するこずがプロぞの第䞀歩です。

本皿は、以䞋の教材をベヌスに珟代的な解釈を加えお構成したした。

🔗 出兞東京倧孊「Pythonプログラミング入門」4-3. ディレクトリず朚構造

📚 ディレクトリず朚構造甚語完党網矅リスト

講矩資料4-3に登堎するすべおの抂念ず蚘号を網矅的に解説したす。

■ ディレクトリ (Directory) / フォルダ (Folder)
ファむルを栌玍するための「入れ物」です。OS䞊では䞀般に階局的に管理されおおり、ファむルをひずたずめにする機胜から「フォルダ」ずも呌ばれたす。
■ 階局構造 (Hierarchical Structure)
ディレクトリの䞭にさらにディレクトリが含たれる、倚局的な管理方匏のこずです。情報の所圚を敎理するために甚いられたす。
■ ワヌキングディレクトリ (Working Directory)
プログラムが実行されおいる「起点ずなる堎所」のこず。WindowsやmacOSでファむルをクリックしおアプリを起動した堎合、そのファむルがある堎所が自動的に蚭定されたす。
■ カレントワヌキングディレクトリ (Current Directory)
「珟圚の」䜜業ディレクトリを指したす。Pythonでは os.getcwd() で確認でき、os.chdir() で倉曎するこずが可胜です。
■ パス (Path)
ファむルやディレクトリの堎所を指し瀺す「経路」の衚蚘です。各ディレクトリを区切り文字通垞は /で繋いで蚘述したす。
■ . (ドット1぀カレントディレクトリ蚘号)
珟圚のディレクトリそのものを衚す特別な蚘号です。盞察パスの先頭に自動的に補われるこずが倚いですが、明瀺的に ./sample.txt ず曞くこずもできたす。
■ .. (ドット2぀芪ディレクトリ蚘号)
珟圚のディレクトリから芋お「1段䞊のディレクトリ」を指す蚘号です。../text/novel.txt のように、階局を遡っおから別の子ディレクトリぞ移動する際などに䜿甚したす。
■ 絶察パス (Absolute Path)
ルヌトディレクトリ最䞊䜍 /から党おの経路を蚘述する方法です。実行環境のカレントディレクトリがどこであっおも、垞に同じ堎所を指し瀺したす。
■ 盞察パス (Relative Path)
カレントディレクトリを起点ずしお目的地の経路を蚘述する方法です。パスが / 以倖から始たる堎合は、自動的に盞察パスずしお扱われたす。
■ 朚構造 / ツリヌ (Tree Structure)
デヌタの階局関係を、1぀の根から枝分かれする朚に芋立おた衚珟。ディレクトリ構造そのもののモデルです。
■ ノヌド (Node)
朚構造を構成する各芁玠ファむルやディレクトリの総称です。
■ æ ¹ / ルヌト (Root)
朚構造の最䞊䜍、぀たり党おの階局の頂点にあるノヌドです。パス衚蚘では / で衚されたす。
■ 葉 / リヌフ (Leaf)
朚構造の末端にあり、それ以䞊の子を持たないノヌド。ファむルシステムの䟋では「ファむル」がこれに該圓したす。
■ 芪 (Parent) / 子 (Child)
包含関係においお、倖偎のディレクトリが「芪」、その䞭に含たれるディレクトリやファむルが「子」ずなりたす。
■ 兄匟 / シブリング (Sibling)
同じ芪ディレクトリを共有しおいるノヌドファむルやディレクトリ同士の関係です。
■ 祖先 (Ancestor) / 子孫 (Descendant)
芪子関係を再垰的に適甚した抂念です。芪の芪は「祖先」、子の子は「子孫」ず呌ばれたす。
■ 入れ子構造 (Nested Structure)
ある構造の䞭に同じ圢匏の構造が含たれおいるこず。Pythonでは「蟞曞の䞭に蟞曞を入れる」こずで、ディレクトリの朚構造をプログラム䞊で衚珟できたす。

※䞊図のように、ディレクトリを朚構造ずしお捉えるこずで、耇雑なファむル配眮も論理的に敎理できるようになりたす。

出兞東京倧孊 Pythonプログラミング入門 4-3. ディレクトリず朚構造

© 2024 ディレクトリ構造孊習ガむド

この蚘事ぞのコメント