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 .txt
arquivos 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')]