No Python 3.5 e mais recente, use a nova **/funcionalidade recursiva :
configfiles = glob.glob('C:/Users/sam/Desktop/file1/**/*.txt', recursive=True)
Quando recursiveé definido, **seguido por um separador de caminho corresponde a 0 ou mais subdiretórios.
Em versões anteriores do Python, glob.glob()não é possível listar arquivos em subdiretórios recursivamente.
Nesse caso, eu usaria os.walk()combinado com fnmatch.filter():
import os
import fnmatch
path = 'C:/Users/sam/Desktop/file1'
configfiles = [os.path.join(dirpath, f)
for dirpath, dirnames, files in os.walk(path)
for f in fnmatch.filter(files, '*.txt')]
Isso percorrerá seus diretórios recursivamente e retornará todos os nomes de caminho absolutos aos .txtarquivos correspondentes . Neste caso específico , fnmatch.filter()pode ser um exagero, você também pode usar um .endswith()teste:
import os
path = 'C:/Users/sam/Desktop/file1'
configfiles = [os.path.join(dirpath, f)
for dirpath, dirnames, files in os.walk(path)
for f in files if f.endswith('.txt')]