Ecco una variante di una riga di comprensione dell'elenco della risposta di Pat (che include anche che si voleva glob in una specifica directory di progetto):
import os, glob
exts = ['*.txt', '*.mdown', '*.markdown']
files = [f for ext in exts for f in glob.glob(os.path.join(project_dir, ext))]
Passa il ciclo sopra le estensioni ( for ext in exts), quindi per ogni estensione prendi ciascun file corrispondente al modello glob ( for f in glob.glob(os.path.join(project_dir, ext)).
Questa soluzione è breve e senza inutili loop for, comprensioni di elenchi nidificati o funzioni per ingombrare il codice. Solo puro, espressivo, zen pitone .
Questa soluzione ti consente di avere un elenco personalizzato di extsciò che può essere modificato senza dover aggiornare il tuo codice. (Questa è sempre una buona pratica!)
La comprensione della lista è la stessa usata nella soluzione di Laurent (per la quale ho votato). Ma direi che di solito non è necessario scomporre una singola riga in una funzione separata, motivo per cui sto fornendo questo come soluzione alternativa.
Bonus:
Se devi cercare non solo una singola directory, ma anche tutte le sottodirectory, puoi passare recursive=Truee utilizzare il simbolo glob multi-directory ** 1 :
files = [f for ext in exts
for f in glob.glob(os.path.join(project_dir, '**', ext), recursive=True)]
Questo invocherà glob.glob('<project_dir>/**/*.txt', recursive=True)e così via per ogni estensione.
1 Tecnicamente, il **simbolo glob corrisponde semplicemente a uno o più caratteri inclusa la barra / (diversamente dal singolare *simbolo glob). In pratica, devi solo ricordare che fintanto che circondi **di barre (separatori di percorso), corrisponde a zero o più directory.