2016-03-27 9 views
0

sagen, dass ich eine Datei, die die folgendenDruckleitung, die mit einem bestimmten Zeichen endet

xxx;xxx;1 
xxx;xxx;1 
xxx;xxx;2 
xxx;xxx;2 
enthält

ich nur die Zeilen drucken möchten, die mit einem 1. Ende habe ich versucht

f = open("input.txt","r") 
endNum= str(raw_input("Enter the end number of a line you'd like to see: ")) 
for line in f: 
    if line.endswith(divChoice): 
     print line 

Kein Erfolg damit. Jede Hilfe wäre willkommen.

Antwort

1

Sie müssen die nachfolgende Leerzeichen abzustreifen:

if line.rstrip().endswith(endNum): 

Sie auch with verwenden sollten Sie Ihre Dateien und raw_input ist bereits ein str zu öffnen:

with open("input.txt") as f: 
    endNum = raw_input("Enter the end number of a line you'd like to see: ") 
    for line in f: 
     if line.rstrip().endswith(endNum): 
      print line 

Und wie @John in der darauf hingewiesen, Kommentare, die Sie verwenden sollten .endswith(endNum) nicht .endswith(divChoice)

Sie haben auch ein anderes Problem, "21".endswith("1") ist Tr ue aber 21 nicht 1 ist, wenn Sie genau aufgeteilt Spiele dann finden wollen und vergleichen:

with open("input.txt") as f: 
    endNum = raw_input("Enter the end number of a line you'd like to see: ") 
    for line in f: 
     if line.rstrip().rsplit(";",1)[1] == endNum: 
      print line 
+1

Zusätzlich 'if line.rstrip(). Endswith (divChoice):' sollte wahrscheinlich 'wenn line.rstrip(). Endswith (endNum):' – John

+0

@ John, guter Fang , nicht sicher wo divChoice kam –

+0

Was ist, wenn die Zeile mit Leerzeichen endet? –

0

ersten Streifen die Linie der \n Charakter. line = line.strip('\n') dann überprüfen Sie das Ende. Korrigiere auch dein Programm. Sie speichern Benutzereingaben in endNum, überprüfen das Ende jedoch mit divChoice.

Alternativ \n überprüfen auch in endswith (nicht empfohlen)

if line.endswith(endNum+'\n'): 
    print line 

+ Eingang mit \n (Zeilenendmarke) verketten wird. Dies hat jedoch den Nachteil, dass die letzte Zeile der Datei nicht berücksichtigt wird (weil sie kein neues Zeilenzeichen haben wird). Ich produziere es hier nur für die Referenz

+0

Wird nicht auf Windows arbeiten, wenn Sie diese Route gehen Sie gehen sollte os.linesep verwenden. – John

+0

Wenn die Datei im Textmodus geöffnet wird, sollte sie '\ n' sein. Nur der binäre Modus behält plattformspezifische Zeilenenden bei. –

+0

Die Art, wie OP es öffnet, sollte funktionieren – Sharad

Verwandte Themen