😀BUSCADOR DE NUMERO DE SERIE EN ARCHIVOS DE DIRECTORIOS

// Some code

```python
#!P4IbuscadorNserie   -  by P4IM0N

import os
import time
import re
from datetime import datetime
import timeit

#recorrer todo el arbol de carpetas y sus archivos buscando un patron de numero de serie 
#patron formato del nmero de serie : N+abc+12345 = Nabc12345
#resultado y presentacion en estilo tabla (fecha actual"d/m/a")+(archivo y numero serie encontrado)+(cantidad encontrada)+(duracion de la busqueda)

#?banner
print('''___  ____ _______  __  ______________      _  __    ___________  ________
  / _ \/ / //  _/ _ )/ / / / __/ ___/ _ |____/ |/ /___/ __/ __/ _ \/  _/ __/
 / ___/_  _// // _  / /_/ /\ \/ /__/ __ /___/    /___/\ \/ _// , _// // _/  
/_/    /_//___/____/\____/___/\___/_/ |_|  /_/|_/   /___/___/_/|_/___/___/  
                                                                        By P4IM0N
------------------------------------------------------------------------------------
                          ░░┌┘     ░░░░░     └┐░░
                           ░│  ||  ▌░░░   ||  │░▐
                           ░│      ░░ ░░      │░
                           ─┘░░░░░░░   ░░░░░░░└─▀
                           ░░░   ▓░░   ░░▓   ░░░
                            ▄─┘   ░░░░░░░   └─▄
                             ░░  ─┬┬┬┬┬┬┬─  ░░
                             ░░░▀┬┼┼┼┼┼┼┼┬▀░░░
                              ░░░└┴┴┴┴┴┴┴┘░░░
                                ░░░░░░░░░░░      
---------------------------------------------------------------------------------''')

#?ruta del directorio a escanear
ruta = "/home/paimon/cursopython/dia9-buscadordenumerosdeserie/extraidoProyecto+Dia+9/Mi_Gran_Directorio"


#?funcionunica que busca las rutas de los archivos con terminacion .txt usando os.walk() y luego usando re.findall() buscamos el match (coincidencia del patron) dentro de los archivos en modo lectura, imprimiendo una tabla al final con dicha informacion
def P4IbuscadorNserie():
    tiempo_inicio = timeit.default_timer()                                                                          #?medir el tiempo, de inicio
    saludo = input("Buenas como estas, deseas buscar numeros de serie en este directorio completo(s/n): ")
    nombre = input("Dime tu nombre manito: ")
    if saludo == "s":                                                                                               #?si la respuesta del usuario es "s" entrara
        print(f"Bien manito {nombre}, estamos buscando los numeros de serie: ")
        lista_archivo_serie_tabla = []                                                                              #?lista para extraer datos para el formato de tabla
        for dir_princ, sub_dir, archivos in os.walk(ruta):                                                          #?con for itineramos en la exploracion con os.walk(ruta) de la ruta de directorio buscando "directorio principal, subdiorectorio y archivos dentro de todos ellos"
            for archivo in archivos:                                                                                #?luego con for itineramos buscando archivo dentro de los archivos encontrados y guardados en el con el uso de walk() anteriormente
                if archivo.endswith(".txt"):                                                                        #?y le decimos que de todos los encontrados con el uso de .endswitch deje entrar a los que solo tienen la extencion .txt                
                    ruta_de_archivos_txt = os.path.join(dir_princ, archivo)                                         #?dentro de la variable ruta_de_archivos_txt con os.path.join le decimos que cree la ruta completa de cada uno de los txt encontrados usando como referencia el directorio principal y el nombre del archivo, y las guarde dentro de esta variable
                    ruta_pura_tabla = os.path.basename(ruta_de_archivos_txt)                                        #?guardo solo el nombre del archivo extraido de la ruta completa con .basename
                    with open(ruta_de_archivos_txt,"r") as archivo_abierto:                                         #?con la ruta de cada archivo txt los pongo en ejecucion con with y en modo lectura guardandolo con as en una variable archivo abierto
                        patron_N_serie = re.findall("N+\w{3}-\d{5}", archivo_abierto.read())                        #?con findall busco el match coinsidencia, con el patron aportado y buscando el mismo dentro de los archivos abiertos ya en bodo lectura con read()            
                        if patron_N_serie:                                                                          #?si ahi un paron de serie encontrado True va a entrar la condicion     
                            lista_archivo_serie_tabla.append((ruta_pura_tabla, patron_N_serie))                     #?con append voy agregando a una lista creada anteriormente, todos los nombres de archivos con basenamed y los numeros de serie para ser utilizados en el modo tabla visual
                            print(f"El archivo esta en: {ruta_de_archivos_txt} ")
                            for numero_de_serie in patron_N_serie:                                                  #?itinero para que me encuantre e inprima luego cada uno de los numeros de serie match encontrados en patron_n_series
                                print(f"Y contiene el NUMERO DE SERIE:{numero_de_serie}")
        ver_tabla = input("Desea verlo en formato de tabla: (s/n) ")
        if ver_tabla == "s":
            def tabla_informatica(lista_archivo_serie):                                                             #?funcion2 interna que va a recibir los datos de la lista_serie _tabla que guardamos antes para ser utilizada y extraer los datos para el modo tabla
                print("-"*50)
                print(datetime.now())
                print("-"*50)
                print("ARCHIVO\t\t\t\tNºSERIE")
                print("-"*50)
                contador = 0
                for a,n in lista_archivo_serie:                                                                     #?itinero entre los a y n osea archivos y numeros serie que guarde previamente en la lista serie tabla
                    print(f"{a}\t\t\t{n}")
                    contador += 1
                print("-"*50)    
                print(f"Mira {nombre} el total de archivos encontrados es: [{contador}]")
                tiempo_final = timeit.default_timer()                                                               #?bandera para marcar el tiempo final de la ejecusion del programa            
                print(f"El sistema demoro en encontrar los numeros de serie: [{tiempo_final-tiempo_inicio:.2f}] segundos")   #?con .2f definimos que queremos dos decimales luego de la coma
                print("SALUDOS Y ESPERO TE ALLA SIDO DE AYUDA :D")
            tabla_informatica(lista_archivo_serie_tabla)                                                            #?ejecucion de la funcion2 internamente ingresandole dicho parametro que dijimos para que extraiga los datos lista_archivo_serie_tabla.                          
    else:
        print(f"muchas gracias manito {nombre}, sera la proxima :)")   
                





P4IbuscadorNserie()       

```

CODEO DEL DIA 9:

Last updated