pythonで特定フォルダ(ディレクトリ)配下のファイルパスを取得する

公開日:
目次

Pythonで作業する際、特定のディレクトリ下にある複数のファイルパスを一度に取得できると便利です。

Pythonのosモジュールを使用のwalkを利用するとできることがわかったので、備忘録を残します。

フォルダ配下のファイルパスを取得する方法

Pythonのos.walk関数を使用することで、指定したディレクトリを再帰的に探索し、そのディレクトリ内のすべてのファイルパスを取得することができます。以下は、その具体的な方法を示したコード例です。

import os

def get_file_paths(directory):
    file_paths = []
    # os.walkを使って指定したディレクトリを再帰的に探索
    for root, _, files in os.walk(directory):
        for file in files:
            # os.path.joinでファイルパスを取得
            file_path = os.path.join(root, file)
            file_paths.append(file_path)
    return file_paths

# 使用例
directory = "/path/to/your/folder"  # フォルダのパスを指定
file_paths = get_file_paths(directory)

# 結果を表示
for path in file_paths:
    print(path)

コード解説

  • os.walk os.walkは指定したディレクトリを再帰的に探索し、ディレクトリ内のファイルとサブディレクトリを探します。この関数はタプル(root, dirs, files)を返します。
  • ループの中身: ループを使用して、root(カレントディレクトリのパス)とfiles(そのディレクトリ内のファイル名のリスト)を組み合わせ、os.path.joinを使用して完全なファイルパスを作成します。
  • ファイルパスの収集: 完全なファイルパスはリストfile_pathsに追加されます。

特定の種類(拡張子)のファイルを取得する方法

すべてのファイルではなく、特定の種類のファイル(例えばPythonファイルなど)だけを取得したい場合は、以下のようなコードを使用します。

def get_file_paths(directory, extensions=None):
    file_paths = []
    if extensions is not None:
        extensions = tuple(extensions)  # tupleに変換して後のstartswithに対応
    for root, _, files in os.walk(directory):
        for file in files:
            if extensions is None or file.endswith(extensions):
                file_path = os.path.join(root, file)
                file_paths.append(file_path)
    return file_paths

# 使用例
directory = "/path/to/your/folder"
extensions = ['.txt', '.py']  # 拡張子をリストで指定
file_paths = get_file_paths(directory, extensions)

# 結果を表示
for path in file_paths:
    print(path)

コード解説

  • if extensions is not None: extensionsが指定されている場合、これをタプルに変換します。これにより、file.endswith(extensions)の条件チェックがタプルに対応します。
  • 指定された拡張子でファイルをフィルタリング: extensionsNoneの場合はすべてのファイルを取得し、そうでない場合は指定された拡張子を持つファイルのみを取得します。