Pythonでファイルやフォルダーにアクセスする方法は、スクリプトの実行場所や目的によってさまざまな方法があります。本記事では、Python標準ライブラリの os
モジュール を使って、ファイルパスの取得方法や、カレントディレクトリの操作方法、相対パスを利用したアクセス方法についてメモとして記載しておきます。
さらに、Python 3.4以降で推奨される pathlib
モジュール を使ったファイル操作方法についても記載します。pathlib
を使うと、より直感的で簡潔なコードを書くことができます。
この記事を参考にすれば、ファイル操作がより柔軟に行えるようになります。
✅ Pythonのファイルパス操作で使う主な関数
関数/属性 | 説明 |
---|---|
os.getcwd() |
現在の作業ディレクトリ(カレントディレクトリ)を取得 |
__file__ |
実行中のスクリプトファイルのパス |
os.path.abspath() |
相対パスを絶対パスに変換 |
os.path.dirname() |
パスからディレクトリ部分を取得 |
os.path.join() |
パスをOS依存の形式で結合 |
os.path.exists() |
ファイルやディレクトリの存在を確認 |
os.makedirs() |
新しいディレクトリを作成 |
Path |
pathlib モジュールの主要クラス |
Path.cwd() |
現在の作業ディレクトリを取得 |
Path(__file__).parent |
スクリプトのディレクトリを取得 |
Path.joinpath() |
パスを結合 |
Path.exists() |
ファイルやディレクトリの存在を確認 |
Path.resolve() |
パスを絶対パスに変換し、シンボリックリンクを解決 |
これらの関数を使うことで、柔軟なファイル操作が可能になります。次のセクションで具体的なコード例を紹介します。
📂 os
モジュールを使った基本的なファイルパスの取得方法
1. 現在の作業ディレクトリの取得
import os
# 現在の作業ディレクトリを取得
current_directory = os.getcwd()
print(f"現在のディレクトリ: {current_directory}")
-
os.getcwd()
を使うことで、スクリプトが実行されているカレントディレクトリの絶対パスを取得できます。
2. スクリプトの場所を基準にしたディレクトリの取得
import os
# スクリプトの場所のパスを取得
current_file_directory = os.path.dirname(os.path.abspath(__file__))
print(f"スクリプトの場所: {current_file_directory}")
-
__file__
は、実行中のスクリプトファイルのパスを取得します。 -
os.path.abspath()
を使うと、相対パスを絶対パスに変換できます。 -
os.path.dirname()
でファイルのパスからディレクトリ部分を取得します。
📂 pathlib
モジュールを使ったファイルパスの取得方法
Python 3.4以降では、pathlib
モジュールを使うことで、ファイルパス操作がより直感的になります。os
モジュールを使うよりもシンプルで、クロスプラットフォーム対応のコードが書けます。
1. 現在の作業ディレクトリの取得
from pathlib import Path
# 現在の作業ディレクトリを取得
current_directory = Path.cwd()
print(f"現在のディレクトリ: {current_directory}")
-
Path.cwd()
は、現在の作業ディレクトリを取得します。
2. スクリプトの場所を基準にしたディレクトリの取得
from pathlib import Path
# スクリプトの場所のパスを取得
current_file_directory = Path(__file__).parent
print(f"スクリプトの場所: {current_file_directory}")
-
Path(__file__).parent
を使うことで、スクリプトファイルが存在するディレクトリのパスを取得できます。
3. ファイルパスを作成してファイルにアクセス
from pathlib import Path
# スクリプトの場所からファイルパスを作成
file_path = Path(__file__).parent.joinpath("test.txt")
print(f"ファイルパス: {file_path}")
-
joinpath()
を使って、ファイルパスを結合します。
4. 1階層上のディレクトリにあるファイルにアクセス
from pathlib import Path
# 1階層上の test.txt にアクセス
file_path = Path(__file__).parent.parent.joinpath("test.txt")
print(f"1階層上のファイルパス: {file_path}")
5. 2階層上の特定のディレクトリを指定してファイルにアクセス
from pathlib import Path
# 2階層上の "data" ディレクトリにある test.txt にアクセス
file_path = Path(__file__).parent.parent.parent.joinpath("data", "test.txt")
print(f"2階層上のファイルパス: {file_path}")
6. ファイルやフォルダーの存在確認
from pathlib import Path
# ファイルが存在するか確認
file_path = Path(__file__).parent.joinpath("test.txt")
if file_path.exists():
print("ファイルが見つかりました!")
else:
print("ファイルが見つかりませんでした。")
7. Path.resolve()
を使った絶対パスの取得とシンボリックリンクの解決
from pathlib import Path
# スクリプトの場所のパスを取得し、絶対パスに変換
current_file_directory = Path(__file__).parent.resolve()
print(f"スクリプトの絶対パス: {current_file_directory}")
-
Path.resolve()
は、パスを絶対パスに変換し、シンボリックリンクが含まれている場合はそのリンクを解決します。 - ファイルやディレクトリの実際の場所を正確に取得したい場合に便利です。
📂 os
モジュールと pathlib
モジュールの比較
操作内容 |
os モジュール |
pathlib モジュール |
---|---|---|
現在の作業ディレクトリを取得 | os.getcwd() |
Path.cwd() |
スクリプトの場所を取得 | os.path.dirname(os.path.abspath(__file__)) |
Path(__file__).parent |
ファイルパスを結合 | os.path.join() |
joinpath() |
ファイルの存在確認 | os.path.exists() |
Path.exists() |
絶対パスの取得とリンク解決 | os.path.abspath() |
Path.resolve() |
🛠 注意点
-
__file__
は、スクリプトがファイルとして実行される場合 にのみ有効です。- 例えば、Python REPL や Jupyter Notebook では使用できません。その場合は
Path.cwd()
を使いましょう。
- 例えば、Python REPL や Jupyter Notebook では使用できません。その場合は
この記事を参考に、Pythonでのファイル操作を効率よく行えるようになりましょう!😊