[Procesamiento de datos] [python] Extraiga palabras clave y las primeras N líneas de cadenas en una gran cantidad de texto

fondo

El programa anterior generó un registro de 300w líneas. La palabra "error" se muestra en el lugar del error, y las otras partes son registros normales. No se preocupe por eso. Quiero ver qué sucedió antes del error. pero el ojo humano solo mira 300w, incluso con ctrl +f también es muy problemático, así que planeo escribir un programa para extraer automáticamente las 5 líneas anteriores de información de registro del bloqueo.
Por ejemplo

start
init
running
running 
working 
deleting
error
start
init
error

quiero extraer como

init
running
running 
working 
deleting
error
start
init
error

código

def get_lines(file):
    for line in file:
        yield line


def extract_lines(input_file, output_file, window_size, markword):
    window = []
    for line in get_lines(input_file):
        window.append(line)
        if (len(window) > window_size):
            window = window[1:]
        if markword in line:
            for l in window:
                output_file.write(l)
            window = []


with open('log.txt', 'r', encoding='UTF-8') as input_file, open('output.txt', 'w',
                                                                         encoding='UTF-8') as output_file:
    extract_lines(input_file, output_file, 5, 'error')

resultado de la operación

inserte la descripción de la imagen aquí
La imagen de la izquierda es la entrada y la salida de la imagen de la derecha muestra que la tarea se puede completar correctamente.

Notas y explicaciones

  • Usted mismo puede cambiar la codificación que usa su texto en el código fuente, y puede cambiar de 5 a unas cuantas líneas como desee extraer.
  • Siempre que haya una palabra clave de salida (markword) en la línea de texto, por ejemplo, en el ejemplo anterior, si hay una línea que se ejecuta con el error xxx, que incluye la palabra clave de error, esta y las líneas anteriores también se generarán.
  • El programa puede ejecutar archivos grandes, porque la palabra clave yield se usa para procesar el texto y no se leerán todos los datos a la vez. (Hay 3 g en el registro de línea de 300w, por lo que no mostraré la imagen aquí)
  • La salida de secuencia positiva de n líneas de contenido utiliza la idea de ventanas deslizantes, busque en Google o lea el código para obtener más detalles.

Supongo que te gusta

Origin blog.csdn.net/gongfpp/article/details/128631483
Recomendado
Clasificación