os.walkでサブディレクトリのファイル一覧をワイルドカードで取得

Pythonには、ファイルやディレクトリを操作するための標準ライブラリが存在します。その中でも、osモジュールに含まれるos.walk()関数は、特定のディレクトリ以下の全てのファイルやディレクトリを再帰的に取得することができます。

os.walkとは何か

os.walk()関数は、指定されたディレクトリ以下の全てのファイルやディレクトリを再帰的に取得するための関数です。この関数は、トップダウンにファイルを列挙します。つまり、指定されたディレクトリの下にあるすべてのディレクトリを順番に処理し、そのディレクトリに含まれるファイルを列挙します。そして、子ディレクトリを処理する前に、そのディレクトリに含まれるファイルをすべて列挙します。

os.walkの基本的な使い方

os.walk()関数は、以下のように使います。

import os
for dirpath, dirnames, filenames in os.walk("path/to/directory"):
    # dirpath: 現在のディレクトリのパス
    # dirnames: 現在のディレクトリに含まれるサブディレクトリのリスト
    # filenames: 現在のディレクトリに含まれるファイルのリスト
    for filename in filenames:
        print(os.path.join(dirpath, filename))

このプログラムは、指定されたディレクトリ以下にあるすべてのファイルのパスを取得し、出力します。

サブディレクトリの探索について

os.walk()関数は、指定されたディレクトリ以下の全てのディレクトリを再帰的に探索します。つまり、指定されたディレクトリの下にあるすべてのディレクトリを順番に処理し、そのディレクトリに含まれるファイルを列挙します。そして、子ディレクトリを処理する前に、そのディレクトリに含まれるファイルをすべて列挙します。

ファイル一覧の取得方法

os.walk()関数を使うことで、指定されたディレクトリ以下にあるすべてのファイルのパスを取得することができます。ファイルのパスは、現在のディレクトリのパスとファイル名を結合することで取得できます。

import os
for dirpath, dirnames, filenames in os.walk("path/to/directory"):
    for filename in filenames:
        filepath = os.path.join(dirpath, filename)
        print(filepath)

ワイルドカードを使用したファイルの検索方法

os.walk()関数を使って、ワイルドカードを使用してファイルを検索することもできます。以下の例では、”.txt”で終わるファイルのパスを取得します。

import os
for dirpath, dirnames, filenames in os.walk("path/to/directory"):
    for filename in filenames:
        if filename.endswith(".txt"):
            filepath = os.path.join(dirpath, filename)
            print(filepath)

具体的なコード例とその解説

以下は、os.walk()関数を使って、指定されたディレクトリ以下にある”.txt”で終わるファイルのパスを取得し、そのファイルを読み込んで出力するコード例です。

import os
for dirpath, dirnames, filenames in os.walk("path/to/directory"):
    for filename in filenames:
        if filename.endswith(".txt"):
            filepath = os.path.join(dirpath, filename)
            with open(filepath, "r") as f:
                print(f.read())

このプログラムは、指定されたディレクトリ以下にある”.txt”で終わるファイルのパスを取得し、そのファイルを読み込んで出力します。

まとめ

os.walk()関数を使うことで、指定されたディレクトリ以下にあるすべてのファイルやディレクトリを再帰的に取得することができます。また、ワイルドカードを使用して、指定されたパターンに一致するファイルを検索することもできます。