Python
 Computer >> コンピューター >  >> プログラミング >> Python

Pythonでディレクトリを再帰的にスキャンする方法【os.walkの使い方を解説】

Pythonでは、標準ライブラリの os.walk() 関数を使うことで、ディレクトリツリーを再帰的にたどることができます。指定したディレクトリを出発点として、サブディレクトリを順次処理しながら、各階層のパス・フォルダ名・ファイル名を取得できます。

os.walk() を使った実装例

import os

for dirpath, dirs, files in os.walk("./my_directory/"):
    for filename in files:
        fname = os.path.join(dirpath, filename)
        with open(fname) as myfile:
            print(myfile.read())

上記のプログラムは、my_directory 配下のディレクトリツリーを再帰的に走査し、見つかったすべてのファイルの内容をコンソールに出力します。

os.walk() の仕組み

os.walk() は、ループのたびに次の3つの値を返します。

  • dirpath: 現在走査中のディレクトリへのパス(文字列)
  • dirs: dirpath 内に含まれるサブディレクトリ名のリスト
  • files: dirpath 内に含まれるファイル名のリスト(サブディレクトリは含まれません)

os.walk() はデフォルトでトップダウン方式で走査するため、必要に応じて dirs の内容を書き換えれば、走査対象のディレクトリを動的に制御することも可能です。

pathlib を使ったモダンな代替方法

Python 3.4 以降では、より直感的に書ける pathlib モジュールを利用することもできます。

from pathlib import Path

for file_path in Path("./my_directory").rglob("*"):
    if file_path.is_file():
        with open(file_path) as myfile:
            print(myfile.read())

rglob("*") を使うと、配下のすべてのファイルとディレクトリを再帰的に取得できます。コードがシンプルになり、WindowsとLinuxなどOS間のパス表記の違いも自動的に吸収される点がメリットです。

単純な一覧取得なら pathlib、細かい制御が必要な場合は os.walk() というように、目的に応じて使い分けるとよいでしょう。

  1. Pythonでディレクトリを作成する方法をわかりやすく解説

    Pythonでディレクトリを作成する基本方法 Pythonでディレクトリ(フォルダ)を作成するには、まず os.path.exists() を使って、そのディレクトリがすでに存在するかどうかを確認します。存在しない場合のみ作成することで、エラーの発生を防ぐことができます。 import os if not os.path.exists(my_folder): os.makedirs(my_folder) os.makedirs() は、指定したパスの中間ディレクトリも必要に応じて自動的に作成してくれる便利な関数です。 EAFPスタイルでの書き方 Pythonでは「EAFP(Easi

  2. Pythonでディレクトリ内の複数のファイルを削除する方法

    Pythonでは、osモジュールに用意されている関数を使うことで、単一のファイルや空のフォルダを簡単に削除できます。この記事では、1つのファイルの削除から、複数ファイルの一括削除、さらには正規表現を使ったパターンマッチングによる削除まで、具体的な方法を解説します。単一ファイルの削除まず、基本的な例として、my_file.txtというファイルを削除する場合は以下のように記述します。>>> import os >>> os.remove(my_file.txt)os.remove()の引数には、絶対パスまたは相対パスを指定します。指定したパスにファイルが存在しな