В дополнение к предлагаемым ответам вы можете сделать это с помощью некоторого ленивого поколения и магии понимания списка:
import os, glob, itertools
results = itertools.chain.from_iterable(glob.iglob(os.path.join(root,'*.c'))
for root, dirs, files in os.walk('src'))
for f in results: print(f)
Помимо размещения в одну строку и исключения ненужных списков в памяти, у этого также есть приятный побочный эффект, который вы можете использовать аналогично оператору **, например, вы можете использовать os.path.join(root, 'some/path/*.c')
, чтобы получить все файлы .c во всех подкаталогах src, которые имеют эту структуру.