Ho una cartella con sottocartelle che sono tutte nel modello YYYYMMDDHHMMSS (timestamp).usa python glob per trovare una cartella che sia un numero di 14 cifre
Desidero utilizzare glob per selezionare solo le cartelle corrispondenti a tale modello.
Ho una cartella con sottocartelle che sono tutte nel modello YYYYMMDDHHMMSS (timestamp).usa python glob per trovare una cartella che sia un numero di 14 cifre
Desidero utilizzare glob per selezionare solo le cartelle corrispondenti a tale modello.
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']
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
@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. –