前回までに作成してきた関数 search に以下の要件を追加します。
- 入力データと出力データは前回と同じです。
- ただし、ディレクトリ内にディレクトリがある場合にその中のファイルも検索できるようにします。
search('notes/', '雪')上記のように notes/ を表示すると以下のように 芥川龍之介 ディレクトリの中も検索表示されることを想定しています。
notes/冬の庭.txt
notes/雨ニモマケズ.txt
notes/雪の日.txt
notes/芥川龍之介/秋.txt
notes/芥川龍之介/雪.txt- ディレクトリを再帰的に検索するには
os.walk関数を使います。os.walk関数はos.listdirとは違いジェネレータというオブジェクトを返します。- 同じようにfor文に与えて使えますが、それぞれのループで
(パス, ディレクトリ一覧, ファイル一覧)が返却されます。 - 以下の様に使います。
- 同じようにfor文に与えて使えますが、それぞれのループで
import os
for path, dirnames, filenames in os.walk('notes/'):
print(path, dirnames, filenames)
# notes ['芥川龍之介'] ['丘.txt', '冬の庭.txt', '夏.txt', '夏の町.txt', '雨ニモマケズ.txt', '雪の日.txt']
# notes/芥川龍之介 [] ['悪魔.txt', '秋.txt', '雪.txt']