2016-07-18 3 views
1

Ich habe eine Datei mit 11 Zeilen. Ich schreibe eine Funktion, die die Zeile mit "XYZ" überspringt und die erste und zweite Spalte der restlichen Zeilen in der Datei zurückgibt. Wenn ich das Modul starte, überspringt es die "XYZ" -Zeile, gibt aber nur die erste der verbleibenden Zeilen zurück.Warum füllt meine Python-Funktion nur ein Wörterbuch mit einer Zeile aus einer Datei?

def popdict(my_file): 
    for line in my_file: 
     if "XYZ" in line: 
      pass 
     else: 
      x = line.split() 
      a = x[1] 
      b = x[0] 
      d[a] = b 
      return d 

Merkwürdigerweise, wenn ich die for Schleife in dem Interpreter-Test (das heißt, ich es nicht als Modul Import), liefert es die richtigen Zeilen.

Irgendwelche Gedanken?

+1

Ihre 'return' Innerhalb der for-Schleife gibt von Funktion die Funktion das erste Mal Ihre else-Klausel ausgeführt wird! –

Antwort

0

Sie kehren von der äußeren Funktion zum ersten Mal zurück, wenn Sie eine Zeile ohne "XYZ" finden. Wenn Sie bis zum Ende der Datei warten soll, dann entfernen Sie die Rückkehr Anweisung aus der Schleife:

def read_to_dict(): 
    for line in my_file: 
     if "XYZ" not in line: 
      x = line.split() 
      a = x[1] 
      b = x[0] 
      d[a] = b 

    return d 
0

Sie sollten return kurz nach der Schleife über die Datei-Finish:

def popdict(my_file): 
    for line in my_file: 
     if "XYZ" in line: 
      pass 
     else: 
      x = line.split() 
      a = x[1] 
      b = x[0] 
      d[a] = b 
    return d 
Verwandte Themen