Если вы используете Python 3.5+ или выше, вы можете сделать это в 1 строке.
import glob
for filename in glob.iglob(root_dir + '**/*.txt', recursive=True):
print(filename)
Как упоминалось в документации
Если рекурсивное значение истинно, шаблон «**» будет соответствовать любым файлам и ноль или более каталогам и подкаталогам.
blockquote>Если вы хотите каждый файл, вы можете использовать
import glob for filename in glob.iglob(root_dir + '**/*', recursive=True): print(filename)