lunes, 4 de octubre de 2010

Receta Python: Buscar y Contar frases de un archivo

Hoy en mi trabajo me han solicitado hacer una búsqueda y conteo de ciertas palabras que procesa uno de los servidores que monitoreamos en la empresa. La solicitud exacta era la de contar todas las solicitudes enviadas (ENV), recibidas (REC), y las con error (50 null, 20 no responde, 99, entre otras) de todos los días del mes de septiembre.

Este servidor procesa bastantes solicitudes por minuto así que toco pensar en una solución práctica que me arrojara la información solicitad de forma rápida y confiable. Recurrí a Python e implemente algo sencillo pero que resulto ser completamente eficaz:

# -*- coding: cp1252 -*-
import os

# Solicito el nombre del archivo a analizar
narchivo = raw_input('Archivo o log a analizar: ')

try:
# Abro el archivo para la lectura
archivo = open(narchivo,'r')

# Inicio el contador para cada una de las frase a buscar
cENV = 0
cREC = 0
cE50 = 0
cE20 = 0
cE99 = 0
cTFA = 0

# Inicio el bucle que lee el archivo
# y agrego la condicion que busca la palabra
for linea in archivo:
if linea.find('ENV') >= 0:
cENV += 1
if linea.find('REC') >= 0:
cREC += 1
if linea.find('Tiempo EN FALLAR') >= 0:
cTFA += 1
if linea.find('FALLO: Código error: 50 null') >= 0:
cE50 += 1
if linea.find('FALLO: Código error: 20 Operador no responde') >= 0:
cE20 += 1
if linea.find('error: 99') >= 0:
cE99 += 1

# Cierro el Archivo
archivo.close()

# Calculo el total de fallos
Tfallos = (cTFA) - (cE50 + cE20 + cE99)
if Tfallos <>
Tfallos = Tfallos * -1

# Mensajes para el usuario
print 'Total solicitudes enviadas: ',cENV
print 'Total solicitudes recibidas: ',cREC
print 'Total Tiempo de Fallos (todos los códigos de error)',cTFA
print 'Total respuesto 50 null: ',cE50
print 'Total respuesta 20 Operador no responde: ',cE20
print 'Total respuesta 99: ',cE99
print 'Total otros fallos: ', Tfallos
except IOError:
print 'El archivo indicado no existe'