2016-05-12 10 views
-1

Ich schreibe ein Skript, dieser Teil des Codes macht mein Skript Ausgabe langsam zu drucken. Ich denke, es ist die verschachtelte Schleife, die das Problem verursacht (verwendet Wörterbuch Konzept dort). Gibt es eine alternative Möglichkeit, wie ich mein Skript dazu bringen kann, das Ergebnis zu drucken, ohne darauf zu warten.Ausgabe ist langsam

Log = open("file.txt") 
for LogLine in Log: 
    flag = True 
    for key, ConfLine in Conf.items(): 
     for patterns in ConfLine: 
      patterns = DateString + patterns 
      if re.match(patterns, LogLine): 
       flag = False 
       break 
     if(flag == False): 
      break 
    if(flag): 
     print LogLine.strip() 
+0

was 'Conf' Sie sind Bezug nehmend auf "Conf.items()"? – Tanu

+0

sein definierendes Wörterbuch –

Antwort

1

C Pandas Antwort ist gut, aber es ist nicht offensichtlich, dass ein Regex voller | der schnellste Weg ist, alle Regexes auszuprobieren. Testen Sie die Leistung dieser Alternative:

pats = [re.compile(date_string+pat) for conf in Conf.values() for pat in conf] 

with open('file.txt') as log: 
    for line in log: 
     if any(pat.match(line) for pat in pats): 
      print(line.strip()) 

Auf einer Seite zur Kenntnis, ist hier, wie Sie Ihren aktuellen Code mit einem sauberen break und keine Notwendigkeit für flag geschrieben werden könnte:

for ConfLine, patterns in ((c, p) for c in Conf.values() for p in c): 
    patterns = DateString + patterns 
    if re.match(patterns, LogLine): 
     break 
else: 
    print LogLine.strip() 
+0

Ich würde gerne denken, dass Ihre erste und meine sind praktisch gleichwertig. Ich wechsle und unterwerfe mich der Regex-Engine und hier evaluiert Python das 'oder'. Das habe ich von * Bealey * gelernt. :) –

+1

@CPanda in der Tat, sie sind gleichwertig. Ich habe versucht, das am Anfang auszudrücken. Einer könnte schneller sein, ich weiß nicht welcher. Sie haben sicherlich den wichtigen Teil der Optimierung gemacht. Auch OP hat jetzt von "jedem" erfahren, was wertvoll ist. –

+0

Roger. Ich wollte kurz sein. –

1

Versuchen Sie Folgendes. Es wird Ihnen viel Schnelligkeit geben. Wenden Sie die entsprechenden Änderungen für Python 2.x an.

Wenn ich die Logik falsch gelesen habe und nicht funktioniert, bitte Kommentar.

+0

@AlexHall Roger. –

+0

Es funktioniert nicht –

+0

@PukhrajSingh erhalten Sie Fehler? –