glob
を使えばよいだけなのですが、実用的には絶対パス化、ディレクトリ・ファイルのフィルタリング、ソートも行った方がよいため、コードもいくらか長くなります。
トップディレクトリ以下の全サブディレクトリを処理する
import os
import glob
# トップディレクトリをセットする sys.argv[1]など
top_level_dir_path = '/home/user'
# サブディレクトリ、ファイルの絶対パスのリストを得る
# 再帰処理(サブディレクトリ以下のディレクトリも処理する)したい場合は recursive=True にする
# recursive=False の場合はワイルドカードは '/*' でよいが recursive=Trueの場合は '/**' とする
# Windows, Linuxどちらもパスの区切り文字は/でOK
paths = map(os.path.abspath, glob.glob(top_level_dir_path + '/**', recursive=False))
# ディレクトリのみフィルタリングする
paths = filter(os.path.isdir, paths)
# ソートされていないので昇順にソートする
paths = sorted(paths)
# 1つずつ処理する
for i, p in enumerate(paths):
print('[%s / %s] Start processing %s' % (i + 1, len(paths), p))
トップディレクトリ以下のファイル名パターンにマッチしたファイルを処理する
import os
import glob
# トップディレクトリをセットする sys.argv[1]など
top_level_dir_path = '/home/user'
# サブディレクトリ、ファイルの絶対パスのリストを得る
# この例ではjpgファイルを取得している
# ファイル名に特定の文字列が含まれる場合は *tokutei*.jpg とする
# /**はrecurseive=Trueと合わせて再帰的にディレクトリを全列挙するという意味
paths = map(os.path.abspath, glob.glob(top_level_dir_path + '/**/*.jpg', recursive=True))
# ファイルのみフィルタリングする
paths = filter(os.path.isfile, paths)
# ソートされていないので昇順にソートする
paths = sorted(paths)
# 1つずつ処理する
for i, p in enumerate(paths):
print('[%s / %s] Start processing %s' % (i + 1, len(paths), p))
参考
ファイル・ディレクトリの名前のパターンマッチングについては公式ドキュメントを参照してください。