Pourquoi est-Python montrant 'ValueError: impossible de convertir la chaîne de flotter'?

J'ai un fichier CSV contenant les numéros de laquelle je suis en train de convertir des de flotteurs.

filename = "filename.csv"
enclosed_folder = "path/to/Folder"
full_path = os.path.join(enclosed_folder,filename)

with open(full_path) as input_data:
    temp = input_data.readlines()
    n = len(temp) #int(temp.pop(0))
    matrix = [x.split(" ") for x in temp]
    for i in range(n):
        for j in range(n):
            matrix[i][j] = float(matrix[i][j])
    input_data.close()

Quand j'ouvre le fichier dans un éditeur de texte, il ne montre pas le \n à la fin de chaque ligne.

Pourquoi est-Python montrant 'ValueError: impossible de convertir la chaîne de flotter'?

Mais l'exécution du code python montre le "ValueError: impossible de convertir la chaîne de flotter' à cause de '\n' qui est présent à la fin de chaque ligne.

Traceback (most recent call last):
  File "hierarchical-clustering.py", line 37, in <module>
    matrix[i][j] = float(matrix[i][j])
ValueError: could not convert string to float: '1,0.058824,0.076923,0.066667,0.055556,0.058824,0.071429,0.052632,0.076923,0.0625,0.0625,0.055556,0.055556,0.05,0.066667,0,0,0.055556,0.0625,0.058824,0.058824,0.047619,0.055556,0.0625,0,0.052632,0.066667,0.055556,0.0625,0.058824,0.041667,0.066667,0.058824,0.071429,0.066667,0.076923,0,0.083333,0.052632,0.071429,0.076923,0,0.0625,0.076923,0.058824,0.076923,0.055556,0,0.0625,0.071429,0.0625,0.0625,0.083333,0,0,0,0.058824,0.0625,0,0.058824,0.0625,0.0625,0.066667,0.0625,0.052632,0.066667,0.076923,0.058824,0.071429,0.066667,0.058824,0.071429,0.058824,0.071429,0.058824,0.071429,0.071429\n'

Alors, comment puis-je corriger cette erreur?

EDIT: j'ai utilisé strip() ainsi que rstrip() comme suggéré dans certaines des réponses à supprimer des espaces, mais toujours l'erreur ne disparaît pas:

Traceback (most recent call last):
  File "hierarchical-clustering.py", line 37, in <module>
    matrix[i][j] = float(matrix[i][j].rstrip())
ValueError: could not convert string to float: '1,0.058824,0.076923,0.066667,0.055556,0.058824,0.071429,0.052632,0.076923,0.0625,0.0625,0.055556,0.055556,0.05,0.066667,0,0,0.055556,0.0625,0.058824,0.058824,0.047619,0.055556,0.0625,0,0.052632,0.066667,0.055556,0.0625,0.058824,0.041667,0.066667,0.058824,0.071429,0.066667,0.076923,0,0.083333,0.052632,0.071429,0.076923,0,0.0625,0.076923,0.058824,0.076923,0.055556,0,0.0625,0.071429,0.0625,0.0625,0.083333,0,0,0,0.058824,0.0625,0,0.058824,0.0625,0.0625,0.066667,0.0625,0.052632,0.066667,0.076923,0.058824,0.071429,0.066667,0.058824,0.071429,0.058824,0.071429,0.058824,0.071429,0.071429'
  • Je ne pense pas que float se soucie de retours à la ligne. J'ai juste essayé de float("1.0\n") sur ma machine et avec bonheur, donne moi 1.0. Je pense que le problème est votre des virgules. float("1,2") ne fonctionne pas, par exemple.
  • Avez-vous considéré l'utilisation de la csv module pour lire votre fichier csv? Si vous l'utiliser au lieu d'essayer d'analyser le fichier manuellement, autant que je me souvienne, il va effectuer rudimentaire de conversion de type en votre nom. Ensuite, vous n'avez pas besoin d'appeler float à tous.
  • Non, Python csv n'assumera pas de tout types. Il délibérément les considère une chaîne de caractères. (C'est à la fois plus Pythonic (explicite est mieux que de manière implicite) et évite une des choses que les programmeurs déteste le plus à propos de Excel.)
  • Oups. Peut-être que je pense à un tiers csv analyseur, puis. Encore, le module est utile, même sans fournir de conversion de type.
InformationsquelleAutor Kristada673 | 2017-06-29