2010-04-22 8 views

Respuesta

12

Dado que glob no admite expresiones regulares, tendrá que crear fuerza bruta la cadena de coincidencia. Una forma de hacerlo es aprovechar el hecho de que el carácter varía en [] se expanden:

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'] 
>>> 

Aproveché el hecho de que en Python, multiplicando una cadena con un número entero n resultados de esa cadena que se repiten n veces.

Por supuesto, es posible que desee seguir adelante y poner en una comprobación para verificar que la ruta dada es en realidad un directorio:

>>> [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

Gracias por la respuesta. Por ahora estaba usando esto: [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] Que básicamente tiene las reglas para el formato que describí (limitando meses, días, horas minutos a sus respectivos rangos), simplemente no estaba seguro de si había una mejor manera de hacerlo. – mikec

+7

@mikec: Sería más fácil seguir con ''[0-9]' * 14' y luego solo aceptar las marcas de tiempo que pueden analizarse con' datetime.strptime', si * realmente * necesita asegurarse de que todo las marcas de tiempo son válidas. –

Cuestiones relacionadas