Использование glob.
Из документов:
Например, рассмотрим каталог, содержащий следующие файлы: 1.gif, 2.txt, card.gif и подпапку подкаталога, которая содержит только файл 3.txt. glob () даст следующие результаты. Обратите внимание, как сохраняются любые ведущие компоненты пути.
>>> import glob
>>> glob.glob('./[0-9].*')
['./1.gif', './2.txt']
>>> glob.glob('*.gif')
['1.gif', 'card.gif']
>>> glob.glob('?.gif')
['1.gif']
>>> glob.glob('**/*.txt', recursive=True) #python 3.5+
['2.txt', 'sub/3.txt']
>>> glob.glob('./**/', recursive=True)
['./', './sub/']
EDIT:
Для питона 3.4
Для более старых версий Python используйте os.walk для рекурсивного обхода каталога и fnmatch.filter для сопоставления с простым выражением:
import fnmatch
import os
matches = []
for root, dirnames, filenames in os.walk('src'):
for filename in fnmatch.filter(filenames, '*.txt'):
matches.append(os.path.join(root, filename))