2013-06-03 2 views
0

У меня есть проблемы со следующим кодом:ValueError: не удалось преобразовать строку плавать:

inputf = open('test.dat', 'r') 
lines = inputf.readlines() 
rico_clus_e = [] 
for line in lines: 
    line.split() 
    print line 
    if (line[0] != '#'): 
     rico_clus_e.append(float(line[4])) 
inputf.close() 

Мой файл test.dat является:

# specn rico_all  rico_all_e rico_clus rico_clus_e rico_farclust rico_far_e extin 
a119  1.07038692 0.11109547 0.61473431 0.15063627 0.32590239  0.14777812 0.207 

И это дает следующий результат в моей терминал:

# specn rico_all  rico_all_e rico_clus rico_clus_e rico_farclust rico_far_e extin 

a119  1.07038692 0.11109547 0.61473431 0.15063627 0.32590239  0.14777812 0.207 

Traceback (most recent call last): 
    File "test.py", line 8, in <module> 
    rico_clus_e.append(float(line[4])) 
ValueError: could not convert string to float: 

Я довольно смущен этим. Это не имело ничего общего с пробелами, я проверил их всех. И если вы меняете 4 на 1, 2 или 3, это работает, поэтому оно должно иметь какое-то отношение к файлу test.dat, но я не могу понять, как это сделать. Я использую python 2.7.3.

+0

Представление (подсказка: 'repr()') элемента is ...? –

+0

Представление « –

ответ

1

line.split() сам по себе ничего не делает для line. Вы должны сохранить результат вызова метода и использовать его вместо этого.

+0

Но почему оно работает для других значений? Изменение числа от 4 до 3, 2 или 1 работает ... Для числа 3 представление равно «9», для элемента 2 это «1» –

+0

Это потому, что 'line [3]' '' '9'' и' line [2] '' '' 1''. И 'line [0]' is '' a''. –

+0

Хорошо, я понимаю ваш ответ сейчас. Он думал, что '' 9'' является чем-то внутренним, но это просто относится к строке. 'line = line.split()' это то, что сделал трюк. Спасибо! –

Смежные вопросы