2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Pythonでのファイル&フォルダーのアクセス方法まとめ

Posted at

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 REPLJupyter Notebook では使用できません。その場合は Path.cwd() を使いましょう。

この記事を参考に、Pythonでのファイル操作を効率よく行えるようになりましょう!😊

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?