Pythonでパスを取得する方法まとめ|os・pathlib・globの使い分け

当ページのリンクには広告が含まれています。

Pythonでパスを使った処理は、ファイル整理や自動化において非常によく使われます。
その際に欠かせないのが「パスの取得」です。

たとえば、Pythonで自動的にメールを作成し、PDFファイルを添付する場合、対象ファイルのパスを取得する必要があります。
ほかにも、特定のディレクトリ内から条件に合ったファイルだけを対象に処理をしたいといったケースも多くあります。

本記事では、Pythonでパスやファイル名を取得する代表的な方法を3つ紹介します。

Pythonパスを取得する代表的な方法
  • osモジュール
  • pathlibモジュール
  • globモジュール

それぞれの使い方と実例を紹介し、最後に目的別の使い分けもまとめていきます。

目次

よく使われるパス関連の用語解説

この記事では「パス」や「ディレクトリ」といった用語が頻繁に登場します。初学者の方でも理解しやすいよう、簡単に整理しておきます。

ディレクトリ(フォルダ)

「ディレクトリ」は、Windowsでいう「フォルダ」とほぼ同じ意味です。ファイルを整理・管理する入れ物で、プログラミングの文脈では「ディレクトリ」と呼ばれることが多いです。

サブディレクトリ

あるディレクトリの中にある別のディレクトリのことを指します。
例:/home/user/documents/reports
この場合、reportsdocuments のサブディレクトリです。

パス

パスとは、ファイルやディレクトリの「場所(経路)」を示す文字列です。
パソコンの中でファイルの住所を表すものと考えるとわかりやすいでしょう。

フルパス(絶対パス)

ルート(最上位階層)からファイルまでの全経路を示したパスです。
例:/Users/username/Documents/example.txt
どこからスクリプトを実行してもこのパスが有効です。

相対パス

現在の作業ディレクトリを基準にしたパスです。
例:./example.txt は「今いる場所にある example.txt」
../data/sample.csv は「1つ上の階層にある data フォルダ内の sample.csv」
実行場所が変わると指す場所も変わるため、注意が必要です。


取得したパスの活用例

取得したファイルパスは、さまざまな処理に活用できます。ここでは、実際の使用例を紹介します。

1. 複数ファイルの一括読み込み・処理

  • CSVファイルをすべて読み込み、1つのデータに結合
  • 画像を一括でリサイズ・圧縮して保存

2. ファイル名から情報を抽出して活用

  • ファイル名から日付や地域を抽出し、データに属性を追加
  • 例:sales_202403.csv → 2024年3月として処理

3. 自動整理やリネーム処理

  • .log など特定の拡張子を別フォルダに移動
  • _done や日付をファイル名に付けて状態を管理

4. ファイル存在確認・古いファイルの削除

  • 処理前にファイルの有無をチェック
  • 一定期間前のバックアップファイルを自動削除

5. 外部連携:メール送信やAPIアップロード

  • 最新のレポートPDFを添付してメール送信
  • 対象フォルダのファイルを自動でクラウドにアップロード

※筆者はこの「外部連携」での活用が最も多く、特に特定拡張子を対象に処理をかけるケースが頻出です。


Pythonでパスを取得する代表的な方法

ここでは、Pythonでよく使われる3つのパス取得方法を紹介します。
それぞれのメリット・デメリットも合わせて解説します。

osモジュールを使ったパスの取得方法

メリット:

  • 古くから使われており、情報が豊富
  • Python 2でも使える互換性の高さ

デメリット:

  • 記述がやや冗長で、読みやすさに劣る場合がある
  • 可読性の面でやや劣る

使用例:パス取得、ファイル名取得、拡張子取得

osモジュールの以下の関数を使うことで、さまざまなファイル処理が可能になります。

osモジュールの使用例
  • os.path.basename(path) の活用例
    パスからファイル名だけを取り出し、ログやレポートに表示する
    ファイル名を使って処理対象を絞り込む(例:if "report" in filename
    ファイルの一覧表示で、見やすくファイル名だけを出す
  • os.path.splitext(filename) の活用例
    拡張子ごとに処理を分岐(例:.jpg は画像圧縮、.csv はデータ読み込み)
    ファイル名の末尾に _done や日付を付けて保存名を変更する
    拡張子を除いたファイル名をキーとして辞書やログに利用する

サンプルコード

下のディレクトリからosモジュールを使用して、フルパス、ファイル名そして拡張子を取得するコード例です。

import os

# このスクリプトは、指定されたディレクトリ内にあるすべての「ファイル」について、
# 以下の情報を表示します:
# ・ファイルのフルパス
# ・ファイル名(拡張子あり)
# ・拡張子
# ※ フォルダやサブディレクトリは対象外です

# 対象ディレクトリのパス
path = "/Users/【ユーザ名】/Desktop/Compress_Image/"

# ディレクトリ内の「ファイルのみ」を取得し、フルパスを作成
full_paths = [
    os.path.join(path, name)
    for name in os.listdir(path)
    if os.path.isfile(os.path.join(path, name))
]

# 出力:フルパス、ファイル名、拡張子
for file_path in full_paths:
    file_name = os.path.basename(file_path)                       
    name_without_ext, ext = os.path.splitext(file_name)        
    print(f"フルパス:{file_path}")
    print(f"ファイル名:{file_name}")
    print(f"拡張子:{ext}")
    print("---")

### 実行結果 ###

--
フルパス:/Users/【ユーザ名】/Desktop/Compress_Image/article_sample.txt
ファイル名:article_sample.txt
拡張子:.txt
---
フルパス:/Users/【ユーザ名】/Desktop/Compress_Image/IMG_1967.jpeg
ファイル名:IMG_1967.jpeg
拡張子:.jpeg
---
フルパス:/Users/【ユーザ名】/Desktop/Compress_Image/python_file.py
ファイル名:python_file.py
拡張子:.py
---
フルパス:/Users/【ユーザ名】/Desktop/Compress_Image/IMG_1971.jpeg
ファイル名:IMG_1971.jpeg
拡張子:.jpeg
---
フルパス:/Users/【ユーザ名】/Desktop/Compress_Image/PDF_SAMPLE.pdf
ファイル名:PDF_SAMPLE.pdf
拡張子:.pdf
---

pathlibモジュールを使ったファイル名の取得方法

メリット:

  • 可読性が高く、直感的な記述が可能
  • パスをオブジェクトとして扱えるため、拡張性に優れる
  • Python 3.4以降の推奨スタイル

デメリット:

  • Python 3.4未満では使用不可

使用例:パス取得、ファイル名取得、拡張子取得

pathlib の以下の属性を使うことで、より直感的にファイルパスを操作できます。

pathlibモジュールの使用例
  • path.name :パスからファイル名〈拡張子あり〉を取得
    パスからファイル名を取り出して表示やログ出力に利用します。
    ファイル名を使ってフィルタ処理(例:if "error" in path.name
    一覧表示などで、パスではなくファイル名だけを見せたいときに便利です。
  • path.stem :拡張子を除いたファイル名を取得
    拡張子を除いたファイル名を処理のキーとして使用できます。
    ファイル名に _done や日付を付けて保存名を変更するときにも使います。
    ファイル分類や出力先の自動命名に最適です。
  • path.suffix :拡張子を取得
    拡張子ごとに処理を分ける用途(例:画像処理、CSV処理など)で使用します。  
    .lower() と組み合わせれば、大文字拡張子にも柔軟に対応可能です。  
    特定の拡張子のファイルだけを抽出して別フォルダへコピー・移動するといった用途にも役立ちます。

サンプルコード

from pathlib import Path

# このコードは、指定したディレクトリ内にあるファイル一覧を取得し、
# 各ファイルのフルパス・ファイル名・拡張子を表示するサンプルです。
# ※ フォルダは対象外です(ファイルのみ)

# 対象ディレクトリのPathオブジェクト
dir_path = Path("/Users/【ユーザ名】/Desktop/Compress_Image/")

# ディレクトリ内のファイル一覧を取得(ファイルのみ)
file_paths = [p for p in dir_path.iterdir() if p.is_file()]

# 各ファイルの情報を表示
for path in file_paths:
    print(f"フルパス:{path}")           
    print(f"ファイル名:{path.name}")    
    print(f"拡張子:{path.suffix}")     
    print("---")

#実行結果

---
フルパス:/Users/【ユーザ名】/Desktop/Compress_Image/article_sample.txt
ファイル名:article_sample.txt
拡張子:.txt
---
フルパス:/Users/【ユーザ名】/Desktop/Compress_Image/IMG_1967.jpeg
ファイル名:IMG_1967.jpeg
拡張子:.jpeg
---
フルパス:/Users/【ユーザ名】/Desktop/Compress_Image/python_file.py
ファイル名:python_file.py
拡張子:.py
---
フルパス:/Users/【ユーザ名】/Desktop/Compress_Image/IMG_1971.jpeg
ファイル名:IMG_1971.jpeg
拡張子:.jpeg
---
フルパス:/Users/【ユーザ名】/Desktop/Compress_Image/PDF_SAMPLE.pdf
ファイル名:PDF_SAMPLE.pdf
拡張子:.pdf
---

globを使って複数ファイル名を取得する方法

メリット

  • パターンに合致する複数ファイルを一括で取得可能
  • 拡張子ベースでの絞り込みが簡単

デメリット

  • 通常の使い方ではサブディレクトリは探索されません。当記事では煩雑さを避けるため、glob によるファイル探索は「指定ディレクトリ直下のみ」を対象とする方法に限定して紹介します。\なお、これは一見デメリットのようですが、探索範囲が限定されていることで指定がシンプルになり、予期せぬファイルを対象としないという点では、ひとつのメリットとも言えます。

使用例:パターンにマッチするファイル一覧を取得(glob)

glob モジュールや pathlib.glob() を使うことで、特定の拡張子や名前パターンに一致するファイルを簡単に取得できます。

globモジュール使用例
  • glob.glob("/path/to/*.txt"):特定拡張子のファイルをリストで取得する
     指定ディレクトリ直下にある .txt ファイルだけを一覧取得します。
     ファイル名の一部をパターンで指定できるため、特定形式のログやレポート収集にも便利です。
  • Path("/path/to/").glob("*.txt"):pathlibでも同様に取得可能
    pathlib.Path.glob() を使えば、オブジェクトとして扱えるため、後続処理との連携もスムーズです。
  • Path.name :ファイル名のみ取り出す(globと組み合わせて活用
    glob.glob() で取得したファイルのフルパスから、ファイル名だけを表示したい場合に `path.name` を使うとシンプルです。  
    ファイル名だけを一覧表示したいケースやログ出力などに役立ちます。

※筆者はこの方法を最も多く使っており、定型処理やファイル自動化スクリプトの基本として活用しています。

サンプルコード

import glob
import os

# このコードは、指定ディレクトリ内の .txt ファイルを一覧取得し、
# フルパス・ファイル名・拡張子を表示するサンプルです

# 対象ディレクトリ(最後にスラッシュを忘れずに)
path = "/Users/【ユーザ名】/Desktop/Compress_Image/"

# .txt ファイルをすべて取得(フルパス)
txt_files = glob.glob(path + "*.txt")

# 各ファイルの情報を表示
for file_path in txt_files:
    file_name = os.path.basename(file_path)
    name_without_ext, ext = os.path.splitext(file_name)
    print(f"フルパス:{file_path}")
    print(f"ファイル名:{file_name}")
    print(f"拡張子:{ext}")
    print("---")
### 実行結果 ###
フルパス:/Users/【ユーザ名】/Desktop/Compress_Image/article_sample.txt
ファイル名:article_sample.txt
拡張子:.txt
---

目的別・おすすめの使い分け

目的おすすめの方法
単一ファイルのファイル名を取得os.path.basename() または Path.name
拡張子を除いた名前が欲しいos.path.splitext() または Path.stem
複数ファイルをまとめて処理したいglobos または pathlib
可読性やモダンな書き方を重視したいpathlib

まとめ

Pythonでのファイル名やパスの取得は、さまざまな場面で必要となる基本スキルです。

  • os は古くからある安心の手法
  • pathlib は読みやすく、今後の主流スタイル
  • glob は複数ファイルの一括処理に非常に便利

目的やプロジェクトに応じて、最適な方法を選んで活用しましょう。
筆者自身も、可読性や扱いやすさの観点から pathlib をメインで活用しています。

コメント

コメントする

目次