2017-02-03 6 views
0

Ich lese eine externe TXT-Datei und zeige alle Zeilen an, die Feld 6 als Y haben. Ich muss dann diese Zeilen zählen. Wenn ich jedoch die Summenfunktion hinzufüge, wird nur eine der Zeilen gedruckt. Wenn ich diese Summenfunktion entferne, werden alle Zeilen wie erwartet angezeigt. Ich nehme an, dass es etwas mit der for-Schleife zu tun hat, aber ich kann nicht herausfinden, wie man alle Zeilen zur Anzeige bringt und meine Summe behält. Kann mir jemand helfen, herauszufinden, wo das schief geht?Loop zeigt beim Hinzufügen einer Summenfunktion nicht alle Zeilen an

noLines = 0 

fileOpen = open ("file.txt","r") 
print ("Name: " + "\tDate: " + "\tAge: " + "\tColour: " + "\tPet") 

for line in fileOpen: 
    line = line[:-1] 
    field = line.split(',') 

    if field[6] == "Y": 
     print() 
     print (field[0] +"\t\t" + field[1] + "\t" + field[2] + "\t\t" + field[3] + "\t\t" + field[4]) 

     noLines = sum(1 for line in fileOpen) 

print() 
print(noLines) 
+0

Sind Sie sicher, dass es keine Leerzeichen vor oder nach dem „Y“? Ich schlage vor, sie nur für den Fall zu entfernen: 'if Feld [6] .strip() ==" Y ": ...' Sie setzen auch die Zeilenzahl in jeder Schleifeniteration zurück. Dies ist wahrscheinlich _not_ was Sie wollen. – DyZ

+0

@Sarah: Sie sollten die Frage nicht so ändern, wie sie bestehende Antworten ungültig macht. Bitte bearbeiten Sie den Code nicht, da diese Fragen auch als Referenz für zukünftige Benutzer (nicht nur Sie) dienen. Bitte kommentieren Sie meine Antwort auf das Problem und ich werde versuchen, Ihnen zu helfen, das Problem zu lösen (nach bestem Wissen) –

+0

Sie sollten den Code bearbeiten, um Sie sauber und klar zu stellen. Aber den Kontext der Frage zu ändern, ist die Ausnutzung der Bearbeitungsfunktion von SO –

Antwort

1

Sie verwenden sum falsch.

noLines = sum(1 for l in open("file.txt","r") if l[:-1].split(',')[6]=='Y') 

Ausgabe mit aktuellen Code: Um das gewünschte Ergebnis zu erzielen, können Sie Ihren aktuellen Code mit sum als Ersatz Da fileOpen ein Generator ist. Sie erschöpfen es vollständig innerhalb sum und daher Ihre nächste for Iteration ist nicht passiert. Statt Summe verwenden, können Sie noLines vor der for Schleife initialisieren:

noLines = 0 

for line in fileOpen: 
    # your stuff ... 

Und statt sum, tun:

noLines += 1 
# instead of: noLines = sum(1 for line in fileOpen) 
+0

Hallo, ich habe das getan. Sehen Sie meinen bearbeiteten Code in meinem ursprünglichen Beitrag. Nichts druckt jetzt aber für die Zählung der Linien? –

+0

@SarahProctoer Haben Sie die Datei erneut geöffnet mit 'fileOpen = open (" file.txt "," r ")'? –

+0

@SarahProctoer Außerdem sollten Sie 'noLines = 0 'vor' for' loop definieren. Überprüfen Sie die Antwort (bearbeitet, um es klar zu machen) –

Verwandte Themen