2016-03-29 2 views
1

Я хочу преобразовать список поплавков в целые числа. Мой кодTypeError: требуется float, Python

import math 

data1 = [line.strip() for line in open("/home/milenko/Distr70_linux/Projects/Tutorial_Ex3/myex/base.txt", 'r')] 
print type(data1) 
data1c = [int(math.floor(i)) for i in data1] 

print data1c[0] 

Что я должен изменить? Файл огромен, только пару строк

1.200000e+03 
1.200000e+03 
1.200000e+03 
1.200000e+03 
1.200000e+03 
1.200000e+03 
1.200000e+03 
1.200000e+03 
+0

Вы можете бросить строки поплавков. 'data1 = [float (line.strip()) для строки в ...]' – khelwood

ответ

5

Вы должны сначала бросить плавать:

[int(float(i)) for i in data1] 

вызова int воли пол номер для вас:

In [8]: int(float("1.23456e+03")) 
Out[8]: 1234 

Вы можете сделать все это в файловой логике:

with open("/home/milenko/Distr70_linux/Projects/Tutorial_Ex3/myex/base.txt", 'r') as f: 
    floored = [int(float(line)) for line in f] 

Полезно использовать with, чтобы открыть ваши файлы, он будет обрабатывать закрытие ваших файлов для вас. Также int и float может обрабатывать пробелы в переднем или заднем пробеле, поэтому вам не нужно беспокоиться об использовании полосы.

Кроме того, если вы просто хотите тянуть поплавки и также не пол, map хороший способом создания списка поплавков, Интс и т.д .. из файла или любой итерации:

floored = list(map(float, f)) 

Или используя python3 где карта возвращает итератор, вы можете удвоить карту:

floored = list(map(int, map(float, f))) 

эквивалентный код в python2 будет использовать itertools.imap

прочитать
+1

Каннингем Да, работает сейчас. –

2

данных из файлов являются всегда str типа, где в качестве параметра, необходимого для math.floor поплавкового

Так что вам нужно преобразовать его в поплавок

data1c = [int(float(i)) for i in data1] 
Смежные вопросы