2016-02-04 3 views
0

Я читаю в данных из текстового файла, который выглядит следующим образом:Python отказывается преобразовать строку плавать

Time Date Inlet Gas skin #1 SKIN #2 OUT GAS 
     °C °C °C °C 
15:28:55 4/11/2015 2.826471e+001 2.217617e+001 2.408844e+001 2.771613e+001 

Когда я прочитал его, я беру время и дату и объединить их для объект strptime и сформировать новый dict. Я также читал метки из первой строки и использовал их как ключи для нового dict. Я получаю ошибку позже в скрипте, который говорит, что для округления значений требуется поплавок. Когда я отмечаю «float (a) для« строки », проводник переменных говорит мне, что« тип »a является строкой_, а его значение равно« 2.826471e + 001 »(цитирует мое). Я попробовал опцию ast eval, и это не сработало.

dict_labels = [label for label in labels if not label == 'Time' and not label == 'Date' and not label == '']  
current_array =np.array(current_array)  
temp_dict = {} 

temp_dict['Dates_Times'] = [datetime.strptime(i + ' ' + j, dateformat) for i,j in zip(current_array[:][:,labels.index('Date')], current_array[:][:,labels.index('Time')])] 
for label in dict_labels: 
    temp_dict[label] = [float(a) for a in current_array[:][:,labels.index(label)]] 
+1

'>>> поплавок ("2.826471e + 001") 28.26471' Этот вход может быть разобраны просто найти , Я думаю, что что-то еще неверно в ваших структурах данных и алгоритмах. – dsh

+0

Обратите внимание, что 'float()' возвращает объект, а представление списка создает новый объект списка. Постижение списка не изменяет объект, на который ссылается переменная 'current_array'. Возможно, после создания float в понимании списка вы переходите к использованию строк в исходном массиве вместо нового списка? – dsh

ответ

1

Одним из вариантов является разделить строку, а затем разработать математику самостоятельно.

т.е. 2.826471e+001 равно 2.826471 * 10^1

Так используйте код:

temp_dict[label] = [float(a.split('e+')[0])*pow(10, int(a.split('e+')[1])) for a in current_array[:][:,labels.index(label)]]

+0

В конце концов я использовал split, потому что было ведущее место. Оказывается, что он висел на другой переменной позже ... мои объекты datetime. – mauve

0

Существует некоторая другая проблема, что строка легко отбрасывать как в Python 2 и 3.

>>> float("2.826471e+001") 
28.26471 
+0

Это заслуживает ответа? – khajvah

+0

Он отвечает на вопрос. Возможно, этот вопрос низок. – jgritty

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