トップ 一覧 検索 ヘルプ RSS ログイン

Directoryツリーを一覧する.pyの変更点

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