Fhernd

tuberias-procesamiento-datos.py

Jun 26th, 2018
1,667
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 2.04 KB | None | 0 0
  1. import os
  2. import fnmatch
  3. import gzip
  4. import bz2
  5. import re
  6.  
  7. def generador_encontrar(ruta, inicio):
  8.     '''
  9.    Encuentra los archivos en un directorio, y que cumplan con un patrón.
  10.    :param ruta: Ruta del directorio
  11.    :param inicio: Ruta de inicio
  12.    :return: Ruta absoluta del archivo
  13.    '''
  14.     for p, lista_directorios, lista_archivos in os.walk(inicio):
  15.         for nombre in fnmatch.filter(lista_archivos, ruta):
  16.             yield os.path.join(p, nombre)
  17.  
  18. def generador_apertura(nombre_archivos):
  19.     '''
  20.    Abre un conjunto de archivos. Los objetos de archivos se producen
  21.    a medida que se piden.
  22.    :param nombre_archivos: Nombre de los archivos
  23.    :return: Objeto archivo
  24.    '''
  25.     for nombre_archivo in nombre_archivos:
  26.         if nombre_archivo.endswith('.gz'):
  27.             f = gzip.open(nombre_archivo, 'rt')
  28.         elif nombre_archivo.endswith('.bz2'):
  29.             f = bz2.open(nombre_archivo, 'rt')
  30.         else:
  31.             f = open(nombre_archivo, 'rt')
  32.  
  33.         yield f
  34.  
  35.         f.close()
  36.  
  37. def generador_concatenacion(iteradores):
  38.     '''
  39.    Concatena una secuencia de iteradores en una única secuencia.
  40.    :param iteradores: Conjunto de iteradores.
  41.    :return: Cadena de iteradores
  42.    '''
  43.     for it in iteradores:
  44.         yield from it
  45.  
  46. def generador_expresion_regular(patron, lineas):
  47.     '''
  48.    Búsqueda a través de un patrón sobre una secuencia de líneas.
  49.    :param patron: Patrón de búsqueda
  50.    :param lineas: Líneas de contenido
  51.    :return: Línea que cumple con el patrón dado.
  52.    '''
  53.     expresion = re.compile(patron)
  54.  
  55.     for linea in lineas:
  56.         if expresion.search(linea):
  57.             yield linea
  58.  
  59.  
  60. loggings = generador_encontrar('access-log*', 'www')
  61. archivos = generador_apertura(loggings)
  62. lineas = generador_concatenacion(archivos)
  63. lineas_python = generador_expresion_regular('(?i)python', lineas)
  64. bytes_columnas = (linea.rsplit(None, 1)[1] for linea in lineas_python)
  65.  
  66. bytes = (int(x) for x in bytes_columnas if x != '-')
  67.  
  68. print('Total:', sum(bytes))
Add Comment
Please, Sign In to add comment