2016-03-29 23 views
-1

Ich habe eine Textdatei. Ich möchte diese Datei nach einem bestimmten Wort durchsuchen und die unmittelbar folgende Zeile zurückgeben.Wie bekomme ich die nächste Zeile von einer Datei suchen?

In meinem Testfall habe ich viele numerische Farbwerte vor dem Namen der Farbe. Ich möchte den Farbnamen eingeben und den numerischen Wert herausholen können. Das ist mein Code:

def colorF(c): 
    h = 0 
    r = False 
    try: 
     f = open("Colors.txt") 
     t = list(f.read().split()) 
     for line in t: 
      h += 1 
      if str(c) in line: 
       u = line 
       print(u) 
       go = False 
       start = '(' 
       end = ')' 

       with open("Colors.txt") as infile: 
        for l in infile: 
         g = l.strip() 
         if start in g and str(c) in line: go = True 
         elif end in g: 
          go = False 
          continue 
         if go: return (g) 
    finally: 
     f.close() 

Kann ich Hilfe bekommen? Ich bin mir nicht sicher, was ich falsch mache.

+1

Bitte geben Sie eine Beispieldatei an. Nur ein paar Zeilen, also kennen wir die allgemeine Struktur. – timgeb

+0

Auch dein Code flippt mich aus. – timgeb

Antwort

1

Sie scheinen Ihren Code zu sein overcomplicating. Erstens vereinfachen, indem die Datei nur einmal zu lesen, eine Zeile zu einem Zeitpunkt, und die Rückkehr nur die next line, wenn Sie den Namen der Farbe in einer bestimmten Zeile finden:

def colorF(colorName): 
    with open("Colors.txt") as colorFile: 
     for line in colorFile: 
      if str(colorName) in line: 
       try: 
        return next(colorFile) 
       except StopIteration: 
        raise Exception("File is malformed: no value existed after color found.") # There is probably a more specific iteration that works here 
     return Exception("Color not found") # There is probably a more appropriate exception to return here 

Ihr Code ein paar anderen mishagus hat: es ist unklar, was Sie damit versuchen, aber basierend auf Ihrer Beschreibung scheint es unnötig.

Die Exception Anhebung findet statt, wenn die Farbe nicht gefunden wird oder die Datei die Farbe gefunden hat, aber kein nachfolgender Wert. Dies kann auf verschiedene Arten geschehen, aber es wird empfohlen, in diesem Fall eine Ausnahme auszulösen, damit der aufrufende Code weiß, dass er keinen Wert aus der Datei erhalten kann.

+0

Guter Anruf @timgeb Ich habe die Antwort aktualisiert. –

+0

Vielen Dank! – CollintheWhite

0

verstehe nicht, ich wirklich, was Ihr Zustand ist ... aber das ist wahrscheinlich die Antwort

for line in f: 
    if some_condition(line): 
     return next(f) # return the next line 
1

Mein Verständnis von dem Format der Datei, da Sie eine Split verwenden, ist dies:

Blue 12 
Red 34 
Green 56 

Und das nicht mag:

Blue 
12 
Red 
34 

Wenn das der Fall ist würde ich verwenden:

def colorF(c): 
with open("Colors.txt", "r") as file: 
    for line in file: 
     words = line.split() 
     for word in words: 
      if word in c: 
       try: 
        ret = next(word) 
        return int(ret) 
       except ColorError: 
        raise Exception("The specified color was not in the file.") 
        return None 
Verwandte Themen