Directoryツリーを一覧する.py
[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は同時に指定できる。