Python lee líneas específicas de texto entre dos cadenas

Tengo problemas para que Python lea líneas específicas. En lo que estoy trabajando es algo como esto:

lines of data not needed lines of data not needed lines of data not needed -------------------------------------- ***** REPORT 1 ***** -------------------------------------- [key] lines of interest are here [key] lines of interest are here [key] lines of interest are here [key] lines of interest are here [key] lines of interest are here #This can also be the EOF -------------------------------------- ***** REPORT 2 ***** -------------------------------------- lines of data not needed lines of data not needed lines of data not needed #Or this will be the EOF 

Lo que he intentado fue algo como:

 flist = open("filename.txt").readlines() for line in flist: if line.startswith("\t**** Report 1"): break for line in flist: if line.startswith("\t**** Report 2"): break if line.startswith("[key]"): #do stuff with data 

Sin embargo, tengo un problema cuando el archivo finaliza sin un delimitador final … Por ejemplo, cuando no se muestra el informe # 2. ¿Cuál es un mejor enfoque?

Una pequeña modificación que parece que debería cubrir su problema:

 flist = open("filename.txt").readlines() parsing = False for line in flist: if line.startswith("\t**** Report 1"): parsing = True elif line.startswith("\t**** Report 2"): parsing = False if parsing: #Do stuff with data 

Si desea evitar el análisis de la línea ” * Informe 1″ … en sí mismo, simplemente coloque la condición de inicio después del if parsing , es decir

 flist = open("filename.txt").readlines() parsing = False for line in flist: if line.startswith("\t**** Report 2"): parsing = False if parsing: #Do stuff with data if line.startswith("\t**** Report 1"): parsing = True