- 追加された行はこのように表示されます。
- 削除された行は
このように表示されます。
{{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は同時に指定できる。