2015-05-29 14 views
8

Ho un programma molto semplice. Il codice:Float deve essere una stringa o un numero?

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

Il file di testo, money.txt, contiene solo questo:

0.00 

Il messaggio di errore che ricevo è:

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

E 'più probabile un semplice errore . Qualche consiglio? Sto usando Python 3.3.3.

+2

Prova: 'moneyx = float (. Money.read() strip())', in realtà ci può essere un carattere '\ n', quindi internamente può sembrare' 0.00 \ n' e quando prova 'float (" 0.0 \ n ")' genera un errore. – ZdaR

+7

'money' è un file, non il contenuto del file. Prova 'float (money.read())' –

+0

Eccellente. Grazie per l'aiuto. –

risposta

9

money è un file object, non il contenuto del file. Per ottenere il contenuto, è necessario il file read. Se l'intero file contiene solo quel numero, allora lo read() è tutto ciò di cui hai bisogno.

moneyx = float(money.read()) 

In caso contrario si potrebbe desiderare di utilizzare readline() per leggere una sola riga o anche provare il modulo csv per i file più complessi.

Inoltre, non dimenticare di close() il file quando hai terminato, oppure usa la parola chiave with per chiuderla automaticamente.

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

Il denaro è un file, non una stringa, pertanto non è possibile convertire un intero file in un float. Invece puoi fare qualcosa di simile, dove leggi l'intero file in un elenco, in cui ogni riga è un elemento nell'elenco. Dovresti passare e convertirlo in questo modo.

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

non è necessario utilizzare readlines, non c'è motivo di costruire un elenco per buttarlo via –

0

È consigliabile utilizzare "con" quando si apre un file in python. In questo modo il file viene implicitamente chiuso dopo l'operazione viene eseguita

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

È anche una buona pratica non chiamare readlines a meno che tu voglio una lista –