f = open('freq.txt', 'w')

def format(value):
    return "%.5f" % value

formatted = [format(float(v)) for v in result]
f.write(str(formatted))

Quel est le problème avec mon code? le résultat est une liste avec 240 flottants, je veux les écrire dans un fichier par ligne.

EDIT Oui, comme Martin l'a souligné, j'ai un fichier comme celui-ci

['56337.19531', '48429.55859', '44960.00000', '41631.85938', '35788.30469', '33180.00000',

Je veux juste des valeurs numériques.

-2
milenko 8 mars 2016 à 15:59

3 réponses

Meilleure réponse

Ce message d'erreur vous indique ce qui ne va pas: value est une chaîne, pas un flottant. Il vous suffit de le convertir:

def format(value):
    return "%.5f" % float(value)

Vous ne voulez probablement pas vraiment écrire une liste dans un fichier. Vous voulez probablement chaque numéro sur sa propre ligne. Pour ce faire, vous devez utiliser str.join():

f.write('\n'.join(formatted))

Encore mieux, utilisez os.linesep:

import os
f.write(os.linesep.join(formatted))
2
zondo 8 mars 2016 à 13:12

Je pense que result contient actuellement une liste de chaînes, et non une liste de flottants. Même si chaque chaîne ne contient qu'un flottant, vous devez indiquer à python que vous souhaitez les considérer comme des flottants et non des chaînes. Pour cela, vous devez les caster : float(val) renvoie une valeur flottante à partir d'un "val" de chaîne. Donc, votre code devrait être:

f = open('freq.txt', 'w')

def format(value):
    return "%.5f" % value

formatted = [format(float(v)) for v in result]
f.write(str(formatted))

Ou, si vous souhaitez toujours transtyper le paramètre donné à la fonction pour éviter d'autres erreurs comme celle-ci:

f = open('freq.txt', 'w')

def format(value):
    return "%.5f" % float(value)

formatted = [format(v) for v in result]
f.write(str(formatted))
0
pip 8 mars 2016 à 13:13

Essaye ça:

f = open('freq.txt', 'w')

def format(value):
    return "%.5f" % float(value)

formatted = [format(v) for v in result]
f.writelines(formatted)
f.close()
0
Walter_Ritzel 8 mars 2016 à 13:12