2016-11-20 22 views
0

私のプログラムに次のデータを読み込もうとしています。ValueError予想2 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 

私は次のコードを使用しています。これはまっすぐです。

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) 

コードは一貫して返します。

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

私はプログラムにスペースで区切られたデータの読み取りに関連する他とValueErrorのエントリ、ここでは、ウェブ上、見て、それには至っていないました実質的に同様の問題を有するものを見つける。

私はこの問題が線d, m = line.split(' ')であると推測します。私はこれが何と呼ばれているのか分かりません(複合割り当て?タプル代入)、それがなぜ機能していないのですか(前にこの方法を試したことはありませんが、それは合理的です)この方法でファイルの読み込みに近づいてきた人が、その状況を明らかにすることができれば、大いに感謝しています。

+3

ファイルのいずれかの行に空白がありません。 – TigerhawkT3

+2

ループの先頭に 'print(line)'を追加して、どの行が失敗しているのかを確認してください。 –

+1

"最後の"行が改行で終わっていると思われます。 – TigerhawkT3

答えて

2

これはアンパックと呼ばれます。 iterable(リスト、タプル、またはインデックス作成をサポートするもの)がある場合、x, y = pointのような構文は要素を取得し、x, yにそれぞれ割り当てます。しかし、そこにはpoint[0]はありませんかpoint[1]場合、それはあなたのファイル内のいくつかの行は、2つの値の間のスペースが不足しているので、おそらく、あなたのケースで何が起こるかある例外

、そうline.split(' ')リターンだけで一つのことをスローします

+0

そのタイプの構文が何であるか、それが何をするのかという問題に対処してくれてありがとう!著者らは自明であると仮定している。 – Ryan

1

ファイルの最後にブランクnew lineが入っていて、分割されたときに1つのアイテムリスト([''])が表示された可能性があります。 (また、空白で区切ってもパラメータは必要ありません。デフォルトです)。ループの先頭に


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

それを解決する必要があります。

+0

チャームのように働いた!どうもありがとう! – Ryan

関連する問題