2017-05-11 5 views
0

Ich habe Ausgabedatei wie unten:Python-Liste für unterschiedliche Anzahl von Strings pro Zeile

junk 
abc 123 xyz test 
123 abc test 123 
bob ani kepu maro 
exist 

Was ich mit dieser Datei Ich versuche, die ich bin auf der Suche Kepu in Spalte 3 in der Datei vorhanden ist.

ich unten Code versuche:

name = "kepu" 
    with open("listfile.txt") as f: 
     for line in f: 
     line = line.split(" ")[2] 
     line = line.lower() 
     if line == name: 
      print "Present" 
     else: 
      print "Not Present" 

Da in der Datei nicht die gleiche Anzahl von Zeichenketten hat, in erster Linie „Junk“ und letzte Zeile „existieren“ enthält nur eine Saite und

line = line.split(" ")[2] 
versuchen

Dies ist der Grund, warum ich unter Störung erhalte:

IndexError: list index out of range 

ich habe versucht, das Entfernen ersten und letzten l ine das ist Junk und exist keyword es funktioniert. aber meine Ausgabedatei ist zufällig.

Bitte helfen Sie mir, was ist der beste Weg, um die Zeichenfolge ist Exit in der dritten Spalte in der Datei zu finden.

Antwort

1

Oder Sie werfen eine Ausnahme fangen:

name = "kepu" 
with open("listfile.txt") as f: 
for line in f: 
    try: 
     line = line.split(" ")[2] 
    except IndexError: 
     continue 
    line = line.lower() 
    if line == name: 
     print "Present" 
    else: 
     print "Not Present" 
0

tun nur eine einfache if Aussage:

name = "kepu" 
with open("listfile.txt") as f: 
    for line in f: 
    if len(line.split(" ")) >= 3: 
     line = line.split(" ")[2] 
     line = line.lower() 
     if line == name: 
      print "Present" 
     else: 
      print "Not Present" 
2

einen Scheck hinzufügen, um sicherzustellen, dass die Linie mindestens 3 Wörter hat:

wordsInLine = line.split(" ") 
if len(wordsInLine) > 2: 
    if wordsInLine[2].lower() == name: 
     print "Present" 
    else: 
     print "Not Present" 
0

Vielleicht verstehen Sie die "für Linie in f" ist nicht klar: Sie können diesen Code nicht wahr, kann sein können Sie feststellen, warum Ihr Problem passiert:

with open("listfile.txt") as f: 
...:  for line in f: 
...:  print 'line=%s'%line 
...: 
line=junk 
line=abc 123 xyz test 
line=123 abc test 123 
line=bob ani kepu maro 
line=exist 
0

Verwenden von regulären Ausdrücken:

import re 

re_kepu = re.compile('^(\w+){2}kepu') 

with open('listfile.txt', 'r') as f: 
    for line in f: 
     if re_kepu.match(line): 
      print('Present') 
      break 
    else: 
     print('Not present') 
Verwandte Themen