2010-04-22 9 views

risposta

12

Poiché glob non supporta le espressioni regolari, è necessario eseguire la forza bruta per creare la stringa di confronto. Un modo è quello di sfruttare il fatto che gli intervalli di caratteri in [] sono espanse:

C:\temp\py>mkdir 123456789

C:\temp\py>C:\Python26\python.exe 
Python 2.6.2 Stackless 3.1b3 060516 (release26-maint, Apr 14 2009, 21:19:36) [M 
C v.1500 32 bit (Intel)] on win32 
Type "help", "copyright", "credits" or "license" for more information. 
>>> import glob 
>>> glob.glob('./' + ('[0-9]' * 14)) 
['.\\123456789'] 
>>> 

presi vantaggio dal fatto che in Python, moltiplicando una stringa con un intero n risultati in tale stringa ripetuti n volte.

Naturalmente, si potrebbe desiderare di andare avanti e mettere in un controllo per verificare che il percorso dato è in realtà una directory:

>>> [path for path in glob.iglob('./' + ('[0-9]' * 14))] 
['.\\11223344556677', '.\\123456789'] 
>>> [path for path in glob.iglob('./' + ('[0-9]' * 14)) if os.path.isdir(path)] 
['.\\123456789'] 
+0

Grazie per la risposta. Per ora stavo usando questo: [0-9] [0-9] [0-9] [0-9] [0-1] [0-9] [0-3] [0-9] [ 0-2] [0-9] [0-2] [0-9] [0-6] [0-9] Che fondamentalmente ha le regole per il formato che ho descritto (limitando mesi, giorni, ore minuti a le loro rispettive gamme), non ero sicuro se ci fosse un modo migliore di farlo. – mikec

+7

@mikec: Potrebbe essere più semplice attaccare con ''[0-9]' * 14' e quindi accettare solo i timestamp che possono essere analizzati con successo con' datetime.strptime', se * veramente * è necessario assicurarsi che tutti i timestamp sono validi. –