Pythonのos.walk()
関数は、指定したディレクトリを起点(ルート)として、そこに含まれるディレクトリツリーを再帰的に辿ることができます。
os.walk()の基本的な使い方
os.walk()
関数を呼び出すとジェネレータオブジェクトを返します。このジェネレータはイテレートされるたびに、辿っているディレクトリの情報を含むタプル (dirpath, dirnames, filenames)
を返します。
import os
for root, dirs, files in os.walk('test_dir'):
print('root : {}'.format(root))
print('dirs : {}'.format(dirs))
print('files: {}'.format(files))
print('-----')
ファイル一覧を取得する方法
os.walk()
関数を使う目的の一つは、ディレクトリの中にあるすべてファイルに対して何かしら処理をしたい場合です。しかし、files
リストの要素はファイル名だけでパスの情報がありませんので、このままではファイル対する処理ができません。このような場合、os.path.join()
関数を使ってファイルのパスを作ります。
for root, dirs, files in os.walk('test_dir'):
for f in files:
path = os.path.join(root, f)
print(path)
走査対象から特定のディレクトリを除外する
繰り返し中にdirnames
リストをdel
、remove
、スライスの代入などを使ってその場で変更することができます。そうすると、変更後のdirnames
リストに従って処理が継続されます。
for root, dirs, files in os.walk('test_dir'):
print('root : {}'.format(root))
print('before dirs: {}'.format(dirs))
if 'dir2' in dirs:
dirs.remove('dir2')
print('after dirs : {}'.format(dirs))
以上、Pythonのos.walk()
関数を活用したディレクトリ走査について解説しました。この関数をうまく使って、ディレクトリ走査を活用してください。