web-dev-qa-db-fra.com

Le flottant doit être une chaîne ou un nombre?

J'ai un programme très simple. Le code:

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

Le fichier texte, money.txt, ne contient que ceci:

0.00

Le message d'erreur que je reçois est:

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

Il s'agit très probablement d'une simple erreur. Aucun conseil? J'utilise Python 3.3.3.

11
Pancake_Senpai

money est un file objet , pas le contenu du fichier. Pour obtenir le contenu, vous devez read le fichier. Si le fichier entier ne contient qu'un seul numéro, alors read() est tout ce dont vous avez besoin.

moneyx = float(money.read())

Sinon, vous voudrez peut-être utiliser readline() pour lire une seule ligne ou même essayer le module csv pour les fichiers plus complexes.

N'oubliez pas non plus de close() le fichier lorsque vous avez terminé, ou utilisez le mot clé with pour le fermer automatiquement.

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

L'argent est un fichier, pas une chaîne, donc vous ne pouvez pas convertir un fichier entier en un flottant. Au lieu de cela, vous pouvez faire quelque chose comme ceci, où vous lisez le fichier entier dans une liste, où chaque ligne est un élément de la liste. Vous boucleriez et le convertiriez de cette façon.

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

Il est préférable d'utiliser "avec" lors de l'ouverture d'un fichier en python. De cette façon, le fichier est implicitement fermé une fois l'opération terminée

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