2015-05-29 14 views
8

Ich habe ein sehr einfaches Programm. Der Code:Float muss eine Zeichenfolge oder eine Zahl sein?

money = open("money.txt", "r") 
moneyx = float(money) 
print(moneyx) 

Die Textdatei, money.txt, enthält nur das:

0.00 

Die Fehlermeldung, die ich erhalten ist:

TypeError: float() argument must be a string or a number 

Es ist sehr wahrscheinlich ein einfacher Fehler . Irgendein Rat? Ich benutze Python 3.3.3.

+2

Versuchen: 'moneyx = Schwimmer (. Money.read() Streifen())' Eigentlich kann es ein '\ n 'Charakter sein, so es intern wie' 0.00 \ n' aussehen kann und wenn Sie versuch 'float ("0.0 \ n") 'es löst einen Fehler aus. – ZdaR

+7

'Geld' ist eine Datei, nicht der Inhalt der Datei. Versuchen Sie 'float (money.read())' –

+0

Ausgezeichnet. Danke für Ihre Hilfe. –

Antwort

9

money ein file object ist, nicht der Inhalt der Datei. Um den Inhalt zu erhalten, müssen Sie read die Datei. Wenn die gesamte Datei nur diese eine Nummer enthält, ist read() alles was Sie brauchen.

moneyx = float(money.read()) 

Andernfalls könnten Sie readline() verwenden, um eine einzelne Zeile zu lesen oder sogar das csv Modul für komplexere Dateien versuchen.

Vergessen Sie auch nicht, close() die Datei, wenn Sie fertig sind, oder verwenden Sie das with Schlüsselwort, um es automatisch geschlossen zu haben.

with open("money.txt") as money: 
    moneyx = float(money.read()) 
print(moneyx) 
4

Geld ist eine Datei, keine Zeichenfolge, daher können Sie eine ganze Datei nicht in einen Float konvertieren. Stattdessen können Sie etwas tun, wo Sie die ganze Datei in eine Liste lesen, wobei jede Zeile ein Element in der Liste ist. Sie würden es durchlaufen und so konvertieren.

money = open("money.txt", "r") 
lines = money.readlines() 
for l in lines: 
    moneyx = float(l) 
    print(moneyx) 
+0

Sie müssen nicht lesenzeilen verwenden, es gibt keinen Punkt, der eine Liste baut, um es wegzuwerfen –

0

Es ist besser, "mit" zu verwenden, wenn eine Datei in Python geöffnet wird. Auf diese Weise die Datei nach der Operation implizit geschlossen wird

getan
with open("money.txt", "r") as f: 
    content = f.readlines() 
    for line in content: 
     print float(line) 
+1

Es ist auch besser, readlines nicht zu nennen, außer Sie Ich möchte eine Liste –

Verwandte Themen