110 lines
2.5 KiB
Python
110 lines
2.5 KiB
Python
|
"""
|
||
|
Programa día 9 - Buscador de números de serie
|
||
|
|
||
|
- Recorrer todos los archivos
|
||
|
y subcarpetas de directorio raiz Mi_Gran_Directorio. método walk() de os.
|
||
|
- Buscar string qye coincida con un patrón de número de serie
|
||
|
- Como mucho un número de serie por fichero.
|
||
|
módulo os para abrir e iterear por el directorio
|
||
|
expresiones regulares para encontrar el formato de número de serie correcto.
|
||
|
Formato:
|
||
|
[N] + [tres carateres de texto] + [-] + [5 números]
|
||
|
Ejemplo: Nryu-12365
|
||
|
Presentación de resultados:
|
||
|
----------------------------------------------------
|
||
|
Fecha de búsqueda: [fecha de hoy - formato dd/mm/aa]
|
||
|
|
||
|
ARCHIVO NRO. SERIE
|
||
|
------- ----------
|
||
|
texto1.txt Nter-15496
|
||
|
texto25.txt Ngba-85235
|
||
|
|
||
|
Números encontrados: 2
|
||
|
Duración de la búsqueda: 1 segundos
|
||
|
----------------------------------------------------
|
||
|
|
||
|
- La 'Duración de búsqueda' debe estar redondeada hacia arriba
|
||
|
|
||
|
"""
|
||
|
|
||
|
from datetime import date
|
||
|
import os
|
||
|
from pathlib import Path
|
||
|
import re
|
||
|
import time
|
||
|
import math
|
||
|
|
||
|
|
||
|
def fecha_hoy():
|
||
|
"""
|
||
|
Devuelve la fecha actual
|
||
|
"""
|
||
|
|
||
|
hoy = date.today().strftime('%d/%m/%Y')
|
||
|
fecha = f'\nFecha de búsqueda: {hoy}'
|
||
|
|
||
|
return fecha
|
||
|
|
||
|
|
||
|
def abrir_fichero(file_path):
|
||
|
"""
|
||
|
Recoge un path de un fichero
|
||
|
y devuelve el contenido del fichero
|
||
|
"""
|
||
|
|
||
|
with open(file_path, encoding="utf-8") as file:
|
||
|
contenido = file.read()
|
||
|
|
||
|
return contenido
|
||
|
|
||
|
|
||
|
def busqueda_serie():
|
||
|
"""
|
||
|
Buscador
|
||
|
"""
|
||
|
|
||
|
patron = r'N\D{3}-\d{5}'
|
||
|
ruta = './Mi_Gran_Directorio'
|
||
|
lista_filas = []
|
||
|
|
||
|
for root, sub, fichero in os.walk(ruta):
|
||
|
if fichero:
|
||
|
for arch in fichero:
|
||
|
sub.clear()
|
||
|
texto = abrir_fichero(Path(root, arch))
|
||
|
busqueda = re.findall(patron, texto)
|
||
|
if re.findall(patron, texto):
|
||
|
fila = f'{arch}\t| {busqueda[0]}\t| {root}'
|
||
|
lista_filas.append(fila)
|
||
|
|
||
|
lista_filas.sort()
|
||
|
return lista_filas
|
||
|
|
||
|
|
||
|
def tiempo_ejecucion():
|
||
|
"""
|
||
|
Ejecuta la búsqueda y devuelve
|
||
|
- La busqueda
|
||
|
- El contador
|
||
|
- El tiempo de ejecución
|
||
|
"""
|
||
|
|
||
|
inicio = time.time()
|
||
|
busqueda_serie()
|
||
|
final = time.time()
|
||
|
tiempo_total = math.ceil(final - inicio)
|
||
|
|
||
|
return tiempo_total
|
||
|
|
||
|
|
||
|
print(f'\n{fecha_hoy()}')
|
||
|
|
||
|
print("""
|
||
|
NOMBRE ARCHIVO\t| NRO. SERIE\t| UBICACIÓN DEL FICHERO
|
||
|
--------------\t| ----------\t| ---------------------""")
|
||
|
for f in busqueda_serie():
|
||
|
print(f)
|
||
|
|
||
|
print(f'\nNúmeros encontrados: {len(busqueda_serie())}')
|
||
|
print(f'Duración de la búsqueda: {tiempo_ejecucion()} seg.\n')
|