@91Faty: Dann musst Du die Daten erst im Speicher sammeln und Gruppieren. Was Du dazu brauchst ist eine Abbildung von den Suchbegriffen zu einer Liste mit den Ausgaben. Also grundsätzlich ein Wörterbuch. Etwas weniger Code wird man mit einem `collections.defaultdict` brauchen, weil man sich dann sparen kann den Unterschied zwischen Schlüsseln zu machen die bereits vorhanden sind, und solchen die neu sind.
Was soll das ``class Log:``? Das ist keine Klasse!
Du hast da übrigens zweimal fast identischen Code stehen — so etwas macht man nicht. Da zieht man die gemeinsamen Daten heraus undverwendet eine Schleife und/oder eine Funktion. Innerhalb des sich wiederholenden Codes ist ebenfalls Code der sich wiederholt.
`line` ist eine Zeichenkette, also sind auch Teilstücke davon Zeichenketten. Was denkst Du was ein `str()`-Aufruf mit einer Zeichenkette als Argument bewirken soll?
Zeichenketten mit `str()` und ``+`` zusammensetzen ist eher BASIC als Python. In Python gibt es dafür die `format()`-Methode auf Zeichenketten.
Dateien die man öffnet, sollte man auch wieder schliessen. Die ``with``-Anweisung ist da praktisch.
Damit komme ich beim bisherigen Code ungefähr hier an (ungetestet):
Code: Alles auswählen
import re
def main():
with open('messages', 'r') as log_lines:
with open('fehler.txt', 'w') as out_file:
for line in log_lines:
for pattern in [r'ata1\S', r'ata2\S']:
if re.search(pattern, line):
message = 'Datum: {} [Timer: {}'.format(
line[0:15], line.split(':[', 1)[1]
)
print(message)
out_file.write('--> ' + message)
if __name__ == '__main__':
main()
Das ist ziemlich tief verschachtelt und damit ein Warnzeichen, dass man das vielleicht besser auf mehrere Funktionen aufteilen sollte. Zwei übliche Trennlinienen an denen man diese Art von Programmen aufteilt sind zwischen Eingabe und Verarbeitung und Verarbeitung und Ausgabe. Also das man beispielsweise die Eingabe in eine Funktion steckt, im Hauptprogramm dann den Rückgabewert dieser Funktion in eine Datenstruktur überführt (hier die Abbildung Muster→geparste Zeilen) und diese Datenstruktur dann einer Funktion übergibt die die Daten in die Ergebnisdatei schreibt.