2016-03-29 20 views
1

Ich möchte Liste der Floats in Ganzzahlen konvertieren. Mein CodeTypeError: ein Float ist erforderlich, 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] 

Was soll ich ändern? Datei ist riesig, nur paar Zeilen

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

Sie Strings werfen können schwimmt. 'data1 = [float (line.strip()) für Zeile in ...]' – khelwood

Antwort

5

Sie müssen werfen zuerst zu schweben:

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

int Willen Boden die Zahl für Sie anrufen:

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

Sie können tun, Alles in der Dateilogik:

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

Es ist eine gute Übung, with zu verwenden, um Ihre Dateien zu öffnen, wird es das Schließen Ihrer Dateien für Sie behandeln. Auch Int und float kann mit führenden oder nachgestellten Leerraum umgehen, so dass Sie sich keine Sorgen über die Verwendung von Streifen machen müssen.

Auch wenn Sie es fehlt nur den Schwimmer zu ziehen und nicht auch Stock, ist map eine schöne Möglichkeit, eine Liste von Schwimmern zu schaffen, Ints etc .. aus einer Datei oder einen iterable:

floored = list(map(float, f)) 

Or mit python3 wo Karte einen Iterator zurückgibt, können Sie Karte verdoppeln:

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

Der entsprechende Code in python2 itertools.imap

verwenden würde,
+1

Cunningham Ja, funktioniert jetzt. –

2

Daten lesen von Dateien sind immer von str Typ, bei dem als Parameter für math.floor erforderlich ist ein Schwimmer

So ist es in Sie konvertieren float

data1c = [int(float(i)) for i in data1] 
Verwandte Themen