{{category Python}} os.walk()が使える。 普通の言語のように、起点ディレクトリを表すオブジェクトを取得(または作成)して、そのメソッドやプロパティを参照する必要はない。 import os for dir_path, subdir_name_list, file_name_list in os.walk(top_dir_path): ... dir_path: walk対象となったディレクトリのパス。 subdir_name_list: dir_path内に存在するサブディレクトリ名のリスト。 file_name_list: dir_path内に存在するファイル名のリスト。 各リスト内の項目は、あらかじめ昇順にソートされているようだ。 os.walk()は、(dir_path, subdir_name_list, file_list)というタプルを返すイテレータを生成する。 タプルはos.walk()の引き数のディレクトリパスを起点とし、以降、subdir_name_listのサブディレクトリ・リストに対してイテレートされていく。 特定のディレクトリをサーチパスからはずすには、イテレータの次のエントリが呼ばれる前に、subdir_name_list内からサブディレクトリ名を削除する(ただし、以下のtopdownオプションがTrueのときに限られる)。 os.walk()には名前つき引き数でオプションを指定できる。 topdownオプション引き数は、ディレクトリwalkの方向を指定する。 for dir, subdirs, files in os.walk(top_dir, topdown=False): print dir, subdirs, files "topdown=False"はディレクトリツリーをボトムアップでwalkする。 topdown引き数を指定しなければ、"topdown=True"と同じ意味。 onerrorオプション引き数に指定する値は、OSErrorオブジェクトひとつを引き数として取る関数。 import os def error_handler(e): print e for dir, subdirs, files in os.walk(top_dir, onerror=error_handler): ... ディレクトリのリスティングでエラーが発生したとき、onerror引き数で指定した関数にOSErrorオブジェクトのインスタンスが渡され、呼び出される。 "onerror=None"だと、ディレクトリのwalking中にエラーが発生しても無視される(これがデフォルト)。 topdownとonerrorは同時に指定できる。