sábado, 9 de octubre de 2010

Receta Python: Buscar una cadena de un archivo en otro archivo

Se tienen dos archivos (archivo1 y archivo2); lo que se pretende es leer el archivo1 linea a linea y buscar cada línea en el archivo2, al final se crea un archivo denominado diferencias donde aparecen las líneas que se encuentran en archivo1 y que NO están en archivo2.




#!/usr/bin/env python
import os

try:
 # Solicito el nombre de los archivos a analizar
 farchivo1 = raw_input('Primer archivo: ')
 farchivo2 = raw_input('Segundo archivo: ')

 # Abro el archivo 1
 archivo1 = open(farchivo1,'r')

 c = archivo1.readlines()

 for i in c:
  archivo2 = open(farchivo2,'r')
  # Leo completamente el archivo2
  full = archivo2.read()
  if full.find(str(i))>=0:
   print i,' OK\n'
  else:
   # Abro un archivo para edición
   fdif = open('diferencias.txt','a')
   noe = i
   fdif.writelines(noe)
  fdif.close()
  archivo2.close()

 archivo1.close()

except IOError:
 print 'El archivo indicado no existe'

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'