Python初心者がつまずきやすいのが「ファイルが読めない」「CSVが保存できない」問題があります。
その原因の多くはディレクトリ構造(フォルダ配置)やパスの指定ミスが原因であることが多いです。
プログラミングをあまりしたことがない人にとっては、ディレクトリの構造とか、パスというのは馴染みが少ない概念だと思います。しかしながら、複雑なプログラムを書いたり、githubから自分の環境に適用したりする場合には必須の概念になります。
今回は、Pythonでのファイル構造・整理術・正しいパスの使い方を実例を交えながら紹介していきます。
✅ ディレクトリとは?パスとは?
そもそものディレクトリとパスの意味は下記の通りです。
- ディレクトリ:フォルダのこと(MacでもWindowsでも同じ)
- パス:そのファイルにたどり着くための“道”もしくはファイルの位置を示すための住所
この中でもパスについては、”絶対パス”と”相対パス”の二つの概念があります。絶対パスはドライブの場所から記載するパスで、郵便で例えるとなると都道府県から番地まですべてを記載する感じが近いといえます。
一方で、相対パスは、その書いたプログラムの場所から見たファイルの位置を指します。例えるならばグーグルマップで現在位置から北に100m直進のあと右折する、みたいな感じが近いかなと思います。
実際の書き方としては下記のリストのような感じになります。
"data/pose_output.csv" → 相対パス(スクリプトから見た位置)
"C:/Users/user/data/pose_output.csv" → 絶対パス(パソコン内のフル経路)
Pythonでは基本、相対パスで記述するのがベターです。その理由としては、絶対パスで書いてしまうと、スクリプトのファイルを移動させてしまうと、使えなくなってしまうからです。相対パスにしておいて、ディレクトリの配置さえ変えなけれな、そのスクリプトが入っているフォルダを移動したとしても問題なく動きます。
✅ Pythonプロジェクトの基本構成(おすすめ)
my_project/
├── main.py ← メインスクリプト
├── utils/ ← 自作関数などを入れる
│ └── angle_calc.py
├── data/ ← 入力用CSVや動画ファイル
│ └── pose_output.csv
├── images/ ← 画像ファイル置き場
│ └── sample.png
├── output/ ← 処理結果の保存先
│ └── result.csv
└── README.md ← プロジェクトの説明ファイル
ワンファイルに詰め込まず、役割ごとにフォルダ分けすると後で管理しやすくなります。githubとかでよく見かけるスクリプトの構成も大体こんな感じだと思います。
✅ ファイルの読み込みパターン(CSV例)
データを読み込む場合にはos.path.join()という関数を使います。osはpandasなどのパッケージとは異なり、pythonにデフォルトで入っているパッケージなのでAnacondaなどのパッケージ管理ソフトからインストールする必要はありません。
import os
import pandas as pd
# dataフォルダ内のCSVを読み込む
csv_path = os.path.join("data", "pose_output.csv")
df = pd.read_csv(csv_path)
🔹 os.path.join()
を使うと、OSの違い(WindowsとMacなど)にも強くなります。
✅ 保存先のフォルダを自動で作る
また、データを出力する場合にディレクトリがない場合があります。そういった場合にはスクリプトがうまく回らないこともあるため、事前にディレクトリを作っておくコードを入れておくとバグが少なく動作させることが可能になります。
import os
output_folder = "output"
os.makedirs(output_folder, exist_ok=True)
save_path = os.path.join(output_folder, "result.csv")
df.to_csv(save_path, index=False)
📎 os.makedirs(..., exist_ok=True)
を使うと、フォルダがなければ自動で作ってくれるので安心。
✅ ファイルが読めないときのチェックリスト
チェック項目 | 内容 |
---|---|
📌 拡張子が合っているか? | .csv や .txt など |
📌 相対パスが正しいか? | "data/file.csv" など |
📌 スペースや全角文字がないか? | "ファイル名.csv" → NGなことも |
📌 読み込み前にファイルが存在するか? | os.path.exists(path) で確認可能 |
特に気を付けたいのは、三つ目のスペースや全角文字です。特に全角文字はエラーの発生源になりやすいのでフォルダやスクリプト名は半角の英語表記にしておくのが無難です。
✅ 実践アドバイス
- StreamlitやJupyter Notebookでも同じ考え方
- 「どこに置くか」「どこに保存するか」を明確に決めてからコードを書く
- プロジェクトごとに
data/
,output/
のような整理された構造を癖にする
✅ まとめ
ポイント | 内容 |
---|---|
ディレクトリ = フォルダ構造 | プロジェクトの土台 |
パス = ファイルの“住所” | 相対パスが基本 |
os.path.join() を活用 | OS間の互換性も◎ |
os.makedirs() で安全な保存先づくり | 自動作成でエラー回避 |
お問い合わせ
不明な点などあれば気軽に X(https://x.com/shimitaro_108)までどうぞ!
コメント