2016-06-06 18 views
0

Ich suche den gesamten Text zwischen einem sich wiederholenden Muster in einer Textdatei zu extrahieren. Meine Textdatei XYZ.txt sieht ungefähr so ​​aus:Extrahieren von wiederholten Mustern aus einer Textdatei in Python

Start 

This is a great day 

End 

Start 
This is another great day 

End 

Start 
This is 3rd great day 
End 

ich suche extrahieren den gesamten Text zwischen jedem Start und Ende, sollte meine Ausgabe wie:

This is a great day 
This is another great day 
This is 3rd great day 

und ich bin auf der Suche nach Speichere alle Ausgaben als separate HTML-Datei. Der Code, den ich verwende, ist wie folgt:

import re 
with open('XYZ.txt') as myfile: 
    content = myfile.read() 

text = re.search(r'Start\n.*?End', content, re.DOTALL).group() 

print(text) 

Aber Code oben nur druckt die erste Zeile. Ich bin mir nicht sicher, wie ich alle Werte zwischen den Mustern drucken und sie als separate HTML-Dateien speichern kann. Ich würde wirklich jede mögliche Richtung schätzen.

Danke

+0

haben Sie versucht, mit readlines()? Außerdem, ohne Regex zu verwenden, bin ich ziemlich sicher, dass Sie Zeilen "ignorieren" können, die die Zeichenfolge START und/oder END enthalten – glls

Antwort

0

würde ich die readlines() Funktion verwenden und so etwas tun:

with open('jokes.txt') as myfile: 
    for line in myfile.readlines(): 
     if line.strip() != 'Start' and line.strip() != 'End' and line.strip(): 
      print line[:-1] 

Dies wird Ausgang geben:

This is a great day 
This is another great day 
This is 3rd great day 

Und weiter verallgemeinert t o jede Art von String zwischen 'Start' und 'End'

0

Sie müssen re.findall verwenden alle Vorkommen von regex zu finden.

>>> lines 
'Start\n\nThis is a great day\n\nEnd\n\nStart\nThis is another great day\n\nEnd\n\nStart\nThis is 3rd great day\nEnd\n' 
>>> 
>>> re.findall('This is.*day', lines) 
['This is a great day', 'This is another great day', 'This is 3rd great day'] 
0

Sie könnten String-Mutation und Generatoren anstelle von re verwenden.

def format_file(file, start, end): 
    f = open(file, 'r').read() 
    return tuple(x for x in ''.join(f.split(start)).replace('\n', '').split(end) if x != '') 

print format_file('XYZ', 'Start', 'End') 

oder reiner Generator

def format_file(file, start, end): 
    f = open(file, 'r').readlines() 
    return tuple(x.rstrip() for x in f if x != '\n' and not x.startswith(start) and not x.startswith(end)) 
print format_file('XYZ', 'Start', 'End') 
0

Wenn Ihre Textdatei sieht aus wie in Ihrem Beitrag, dann können Sie nicht regex benötigen, können Sie list comprehension verwenden können.

Sie können alle Zeilen, die Sie extrahieren möchten, einfach in einer Liste speichern.

lst = [] 
with open('XYZ.txt', 'r') as myfile: 
    for line in myfile: 
     line = line.strip() 
     lst.append(line) 
lst2 = [i for i in lst if i != 'Start' and i != 'End' ]   
print lst2 

Der Ausgang:

['This is a great day', 'This is another great day', 'This is 3rd great day'] 
Verwandte Themen