os.walk

os.walkを使うと任意のディレクトリ以下のファイル名を取得することができます。

# walk.py
import os
import sys

for root, dirs, files in os.walk(sys.argv[1]):
  for f in files:
    print os.path.join(root, f)

ディレクトリ構成が

  • walk.py
  • foo
    • apple.txt
    • bar
      • boo
        • orange.txt

こんな感じになっているものとして、./ 以下のファイルを表示してみます。

> python walk.py ./
./foo/apple.txt
./foo/bar/boo/orange.txt

os.path.joinはパスの要素をうまいこと結合してくれる関数です。

import os
print os.path.join('foo', 'bar', 'boo')
# => foo/bar/boo

print os.path.join('/foo', 'bar/', 'boo')
# => /foo/bar/boo

print os.path.join('/foo', 'bar/', '/boo')
# => /boo

最後の例は /boo が絶対パスだと認識されているのでしょうか……?