Cómo agarrar las líneas DESPUÉS de una línea coincidente en python

Soy un aficionado que usa Python de vez en cuando. Lo siento si esta es una pregunta tonta, pero me preguntaba si alguien sabía una manera fácil de tomar un montón de líneas si el formato en el archivo de entrada es el siguiente:

“Título 1

Línea 1

Línea 2

Línea 3

Título 2

Línea 1

Línea 2

Línea 3 ”

No sabré cuántas líneas hay después de cada encabezado, pero quiero capturarlas todas. Todo lo que sé es el nombre, o un patrón de expresión regular para el encabezado.

La única forma que conozco de leer un archivo es la forma “para línea en archivo:”, pero no sé cómo capturar las líneas DESPUÉS de la línea en la que estoy actualmente. Espero que esto tenga sentido, y gracias por la ayuda!

*¡Gracias por todas las respuestas! He intentado implementar algunas de las soluciones, pero mi problema es que no todos los encabezados tienen el mismo nombre, y no estoy seguro de cómo solucionarlo. Necesito una expresión regular diferente para cada … ¿alguna sugerencia? *

Funciones del generador

def group_by_heading( some_source ): buffer= [] for line in some_source: if line.startswith( "Heading" ): if buffer: yield buffer buffer= [ line ] else: buffer.append( line ) yield buffer with open( "some_file", "r" ) as source: for heading_and_lines in group_by_heading( source ): heading= heading_and_lines[0] lines= heading_and_lines[1:] # process away. 

Puede usar una variable para marcar el rumbo que está siguiendo actualmente y, si está configurada, tome cada línea hasta que encuentre otro encabezado:

 data = {} for line in file: line = line.strip() if not line: continue if line.startswith('Heading '): if line not in data: data[line] = [] heading = line continue data[heading].append(line) 

Aquí hay un fragmento de http://codepad.org que muestra cómo funciona: http://codepad.org/KA8zGS9E

Editar : Si no te importan los valores de encabezado reales y solo quieres una lista al final, puedes usar esto:

 data = [] for line in file: line = line.strip() if not line: continue if line.startswith('Heading '): continue data.append(line) 

Básicamente, no es necesario rastrear una variable para el encabezado, en lugar de eso, simplemente puede filtrar todas las líneas que coincidan con el patrón de encabezado.

Aparte de un generador, creo que podemos crear un dictado donde la clave es “Encabezado” y el valor es una lista para guardar las líneas. Aquí está el código

 odd_map = {} odd_list = [] with open(file, 'r') as myFile: lines = myFile.readlines() for line in lines: if "Heading" in line: odd_list = [] odd_map[line.strip()] = odd_list else: odd_list.append(line.strip()) for company, odds in odd_map.items(): print(company) for odd in odds: print(odd) 

Realmente no sé Python, pero aquí hay un poco de pseudocódigo.

int header_found = 0;

[comienza donde bucle donde estás recorriendo líneas de archivo]

if (header_found == 1) [línea de captura]; header_found = 0;

if (line = ~ / [regexp for header] /) header_found = 1;

La idea es tener una variable que haga un seguimiento de si ha encontrado o no un encabezado, y si lo ha hecho, para agarrar la siguiente línea.