トップ 差分 一覧 ソース 検索 ヘルプ PDF RSS ログイン

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は同時に指定できる。