2015-05-11 3 views
0

Я не совсем понимаю, почему это не работает. Кто-нибудь может мне помочь?конвертировать строку в float в цикле

У меня есть текстовый файл, в котором данные перечислены следующим образом.

04/05/2015 15:30 58,6

04/05/2015 16:00 56,3

...

каждая строка имеет 3 пространства разделенных данных.

Я прочитал с

with open('./data') as fi: 

    data = [[t for t in line.split() ]for line in fi] 

Тогда переменная содержит данные

[['04/05/2015', '15:30', '58.6'], 
['04/05/2015', '16:00', '56.3'], 
... 
] 

Я хотел бы, чтобы вынуть данные только в 3-м столбце, а затем я сделал петлю.

for t in data: 
    a=float(t[2]) 

Но я получил ошибку

ValueError        Traceback (most recent call  last) 
<ipython-input-76-83c96b309de0> in <module>() 
     2 i=0 
     3 for t in data: 
----> 4  a=float(t[2]) 
     5 

ValueError: could not convert string to float: 

То, что я не понимаю, если я заменю «а =» с «печать», напечатанное значения.

for t in data: 
    print float(t[2]) 

Почему это не работает путем замены, но значения печати?

+0

Можете ли вы указать значение 't [2]' при возникновении ошибки? –

+0

Покажите нам полное содержимое файла. –

+2

Кроме того, вложенное понимание бессмысленно. Используйте: '[line.split() для строки в fi]' –

ответ

1

Кажется, у вас есть символы Юникода в вашем исходном файле. Вы можете указать кодировку, с которой вы открываете файл с codecs.open:

import codecs 
with codecs.open("input.txt", encoding="utf-8") as f: 
    data = [line.split() for line in f] 
a = [] 
for row in data: 
    print [col for col in row] 
for t in data: 
    try: 
    a.append(float(t[2])) 
    except ValueError: 
    break 
print(a) 

Вышеприведенные печатает [58.6, 56.3] с

04/05/2015 15:30 58.6 
04/05/2015 16:00 56.3 
04/05/2015 16:00 \xc2\xa0 

в input.txt.

+0

Прошу прощения за мою глупость. Данные имеют строку, которая не является значением вообще. Вот почему я получил ошибку. – user26767

+0

Я обновил свой ответ, чтобы показать, как вы можете открыть файл с помощью кодировки utf8. – EvenLisle

+0

Спасибо за ответ. Несмотря на то, что проблема была только моим видом, но ваш ответ очень помог мне в моей работе. – user26767

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