Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import os
- import fnmatch
- import gzip
- import bz2
- import re
- def generador_encontrar(ruta, inicio):
- '''
- Encuentra los archivos en un directorio, y que cumplan con un patrón.
- :param ruta: Ruta del directorio
- :param inicio: Ruta de inicio
- :return: Ruta absoluta del archivo
- '''
- for p, lista_directorios, lista_archivos in os.walk(inicio):
- for nombre in fnmatch.filter(lista_archivos, ruta):
- yield os.path.join(p, nombre)
- def generador_apertura(nombre_archivos):
- '''
- Abre un conjunto de archivos. Los objetos de archivos se producen
- a medida que se piden.
- :param nombre_archivos: Nombre de los archivos
- :return: Objeto archivo
- '''
- for nombre_archivo in nombre_archivos:
- if nombre_archivo.endswith('.gz'):
- f = gzip.open(nombre_archivo, 'rt')
- elif nombre_archivo.endswith('.bz2'):
- f = bz2.open(nombre_archivo, 'rt')
- else:
- f = open(nombre_archivo, 'rt')
- yield f
- f.close()
- def generador_concatenacion(iteradores):
- '''
- Concatena una secuencia de iteradores en una única secuencia.
- :param iteradores: Conjunto de iteradores.
- :return: Cadena de iteradores
- '''
- for it in iteradores:
- yield from it
- def generador_expresion_regular(patron, lineas):
- '''
- Búsqueda a través de un patrón sobre una secuencia de líneas.
- :param patron: Patrón de búsqueda
- :param lineas: Líneas de contenido
- :return: Línea que cumple con el patrón dado.
- '''
- expresion = re.compile(patron)
- for linea in lineas:
- if expresion.search(linea):
- yield linea
- loggings = generador_encontrar('access-log*', 'www')
- archivos = generador_apertura(loggings)
- lineas = generador_concatenacion(archivos)
- lineas_python = generador_expresion_regular('(?i)python', lineas)
- bytes_columnas = (linea.rsplit(None, 1)[1] for linea in lineas_python)
- bytes = (int(x) for x in bytes_columnas if x != '-')
- print('Total:', sum(bytes))
Add Comment
Please, Sign In to add comment