Python verschachtelte Schleife nicht Schleife

Ich bin ein Python-Anfänger und ich kann meine Schleife nicht machen.

Hier ist der Fall: Ich habe zwei CSV-Dateien (Ereignisprotokolle).

Zuerst heißt bd8result.csv mit 4 oder 5 Zeilen wie folgt strukturiert:

2015/10/30 09:53:44,blabla1,259373865,95,F,A1 IP Thers,A1SIP V1 (R),-,,1446195224 2015/10/30 11:03:14,blabla2,259431070,32,F,A7 IP MornOs,A7SIP V1 (R),-,,1446199394 2015/10/30 21:30:59,blabla3,259980991,86,F,A2 IP Hor4ain,A2IP V1 (R),-,,1446237059 

Erste Spalte ist das Datum, zweitens ist das IP-Ereignis ( Ziel ), zuletzt ist die Epochenzeit.

Ich muss blabla1, blabla2 und blabla3 und Ereignisse, die 20mn vor und 20 Minuten nach diesen Ereignissen zugeordnet sind, in einer größeren Protokolldatei finden, die die gleiche Struktur hat und das Ergebnis in einer CSV-Datei schreibt. Ich sammle nur Ereignisse, die sich auf demselben Lecteur Info befinden (also kommt der Test, wenn … ).

Mein Code sieht so aus:

 with open('result_'+ namefile + '.csv', 'rb') as master1, open('epoch_'+ namefile + '.csv', 'rb') as hosts1: reader2 = csv.reader(master1) reader1 = csv.reader(hosts1) for row in reader2: target = row[1] lecteur = row[5] epoch_ref = int(row[-1]) for row2 in reader1: epoch1 = int(row2[-1]) lecteur1 = row2[5] with open('result_scout' + namefile + '.csv', 'a') as results1: if epoch1 > (epoch_ref - ecart) and epoch1 < (epoch_ref + ecart) and lecteur1 == lecteur: writer1 = csv.writer(results1) writer1.writerow([target]+[sys.argv[1]]+row2) results1.close() 

Mein Problem ist, dass es richtig das erste Element ( blabla1 ) ausführt, aber schreibt nichts für blabla2 und blabla3.

Ich habe mehrere Dinge ausprobiert, aber ich bin stecken geblieben.

Jede Hilfe geschätzt. Vielen Dank!

  • Zu viele statisch verschachtelte Blöcke python
  • Nested for-loop Element-weise Liste Vergleich
  • Python verschachtelte for-loop, die nicht zuerst ausgeführt wird
  • So erstellen Sie Muster in Python mit verschachtelten Schleifen?
  • Warum hat Python eine Grenze für die Anzahl der statischen Blöcke, die verschachtelt werden können?
  • Python iterating durch verschachtelte Wörterbücher
  • In python gibt es einen einfacheren Weg zu schreiben 6 verschachtelt für Loops?
  • Übergeben von Argument aus der übergeordneten Funktion in die verschachtelte Funktion Python
  • One Solution collect form web for “Python verschachtelte Schleife nicht Schleife”

    Nach einer Iteration von Looping über reader2 , ist reader1 durch seine for-Schleife erschöpft und hebt StopIteration und wird in den aufeinanderfolgenden Loops nichts zurückgeben.

    Sie sollten in jeder Iteration eine neue Instanz von csv.reader :

     with open('result_'+ namefile + '.csv', 'rb') as master1: for row in csv.reader(master1): target = row[1] lecteur = row[5] epoch_ref = int(row[-1]) with open('epoch_'+ namefile + '.csv', 'rb') as hosts1: for row2 in csv.reader(hosts1): epoch1 = int(row2[-1]) lecteur1 = row2[5] with open('result_scout' + namefile + '.csv', 'a') as results1: if epoch1 > (epoch_ref - ecart) and epoch1 < (epoch_ref + ecart) and lecteur1 == lecteur: writer1 = csv.writer(results1) writer1.writerow([target]+[sys.argv[1]]+row2) results1.close() 

    Aus der Dokumentation :

    Csv.reader (csvfile)

    Gib ein Leserobjekt zurück, das über Zeilen in der angegebenen csvfile iterieren wird. Csvfile kann jedes beliebige Objekt sein, das das Iterator-Protokoll unterstützt und jedes Mal, wenn seine nächste () -Methode aufgerufen wird, einen String zurückgibt.

    Das bedeutet, dass, nachdem der Leser StopIteration erhöht StopIteration es wie ein erschöpfter Generator erschöpft sein wird.

    Python ist die beste Programmiersprache der Welt.