2016-11-20 4 views
0

Ich versuche, die folgenden Daten in mein Programm zu lesen.ValueError Erwartet 2 Got 1 Python

Distance (m) Mass (kg) 
0.0865 0.1 
0.1015 0.15 
0.4416 0.9 
0.4304 0.95 
0.437 1.0 

Ich verwende den folgenden Code, der direkt aus dem Buch ist.

def getData(fileName): 
    dataFile = open(fileName, 'r') 
    distances = [] 
    masses = [] 
    discardHeader = dataFile.readline() 
    for line in dataFile: 
     d, m = line.split(' ') 
     distances.append(float(d)) 
     masses.append(float(m)) 
    dataFile.close() 
    return (masses, distances) 

Der Code konsequent zurück:

ValueError: not enough values to unpack (expected 2, got 1) 

Ich habe in anderen Valueerror Einträge sah, hier und auf der Bahn, die auf das Lesen durch Leerzeichen getrennte Daten in ein Programm betreffen, haben aber noch finde einen mit einem im Wesentlichen ähnlichen Problem.

Ich vermute, dass das Problem die Linie d, m = line.split(' ') ist. Ich bin mir nicht sicher, wie das heißt (zusammengesetzte Zuweisung? Tupel Zuweisung?), Warum es nicht funktioniert (ich habe es noch nie so versucht, aber es scheint vernünftig), oder wie es funktioniert. Wenn jemand, der sich auf diese Weise mit dem Lesen einer Datei befasst hat, etwas Licht in die Situation bringen könnte, würde dies sehr geschätzt werden.

+3

In einer der Zeilen in Ihrer Datei ist kein Platz. – TigerhawkT3

+2

Versuchen Sie, am Anfang Ihrer Schleife 'print (line)' hinzuzufügen, um zu sehen, in welcher Zeile ein Fehler auftritt. –

+1

Ich vermute, die "letzte" Zeile endet mit einem Zeilenvorschub. – TigerhawkT3

Antwort

2

Dies wird Entpacken genannt. Wenn Sie einen iterablen Wert haben (Liste, Tupel oder irgendetwas, das Indexierung unterstützt), erhält eine Syntax wie x, y = point die point[0], point[1] Elemente und ordnet sie x, y zu. Wenn es jedoch keine point[0] oder point[1] wird eine Ausnahme

wirft Das ist, was in Ihrem Fall passiert, wahrscheinlich, weil einige Zeilen in der Datei fehlen ein Leerzeichen zwischen den beiden Werten, so line.split(' ') kehrt nur eine Sache

+0

Vielen Dank für die Frage, was diese Art von Syntax ist und was es tut! Die Autoren vermuten, dass dies selbstverständlich ist. – Ryan

1

Sie haben wahrscheinlich am Ende der Datei einen leeren new line gelandet, der beim Aufteilen nur eine Elementeliste (['']) enthielt. (Auch das Teilen nach Leerzeichen erfordert keinen Parameter, es ist der Standardwert).


if len(line.split()) < 2: continue 

am Anfang der Schleife sollte es lösen.

+0

Arbeitete wie ein Charme! Danke vielmals! – Ryan

Verwandte Themen