¿Cómo filtrar los nombres de un directorio con Python?

Iniciado por jheberg, 8 Febrero 2018, 08:17 AM

0 Miembros y 1 Visitante están viendo este tema.

jheberg

Hola.

Estoy haciendo un script para saber cuantos archivos hay en un directorio que cumplan cierta condición.

Por ejemplo, tengo estos cinco archivos en una carpeta:
lista - copia - 1.txt
lista - copia.txt
lista 1.txt
lista 2.copia - 1.txt
lista.txt

Ok, quiero que el script solo cuente los archivos 'lista.txt' y 'lista 1.txt', donde 1 puede ser cualquier número, al resto de archivos debe ignorarlos.

Este es mi avance:

def contador():
   count=0
   for archivos in os.listdir('.'):
     if archivos=='lista.txt' or archivos[6:archivos.index('.')].isdigit():
         count=count+1
   return count


Como bien pueden darse cuenta en el segundo parámetro del if también va a contar al archivo 'lista 2.copia - 1.txt' así que no me sirve, y ya no sé que estrategia usar.

Cambiar el nombre a los archivos no es una opción, ni siquiera moverlos a otro lado.

Ah por cierto, uso Python 2.7

Eleкtro

#1
Cita de: jheberg en  8 Febrero 2018, 08:17 AMya no sé que estrategia usar.

Este es otro caso en el que puedes aplicar los beneficios de RegEx como ya te fue demostrado en otra duda. Puedes usar RegEx para simplificar ambas condiciones en una sola (aunque no sé si habrá otro modo más simple en Pythton), evaluando la siguiente expresión regular:

^lista(\s\d)?\.txt$

¿Cómo usar RegEx en Python?, la respuesta aquí:

Usa la función 'match' del módulo 're' en Python y esa expresión regular devolverá una instancia de 'MatchObject' si el nombre coincide con: "lista.txt" o "lista{espacio en blanco}{número}.txt".

PD: no tengo Python ahora mismo instalado, de lo contrario te mostraría un código ya hecho.

Saludos!








jheberg