ValueError: impossible de convertir la chaîne de flotter
J'ai:
data1=open('file1.txt','r')
data2=open('file2.txt','w+')
for line in data1.readlines():
items = line.split(' ')
x = log(float(items[0]))
y = float(items[1])
data2.write(x)
data2.write('\t')
data2.write(y)
data2.write('\n')
où fichier1 contient
l 0.1
2 0.1
3 0.1
4 0.1
5 0.1
6 0.1
7 0.1
8 0.1
9 0.1
10 0.1
Arriver
ValueError: could not convert string to float: 1
Je n'ai pas tout à fait comprendre pourquoi je me fais une erreur, s'il vous plaît aider moi.
Merci à l'avance.
- Pourriez-vous poster le message d'Erreur complet?
- Est-il un l dans la première ligne du fichier ou est-ce une faute de frappe?
- Au moins poster la bonne exī:
ValueError: could not convert string to float: l
- le message d'erreur complet x = log(float(items[0])) ValueError: impossible de convertir de la chaîne d'float: l
Vous devez vous connecter pour publier un commentaire.
C'est parce que la première ligne de votre fichier est lettre
l
qui ne peuvent être converties en un nombre à virgule. Peut-être que c'est une erreur de frappe et que vous voulez qu'il soit certain nombre1
? si oui, alors votre code sera correct. Ensuite, vous avez besoin d'autres modifications afin de rendre votre code plus pythonic comme l'utilisation dewith
pour traiter des fichiers:line.split()
pasline.split(' ')
, sinon, ils vont obtenir la même erreur à nouveau, mais cette fois pour une chaîne vide.log
de chaque élément dansitems
et pourquoifile.readlines
?for line in fr:
est beaucoup mieux.txt.append("{0}\t{1}".format( log(float(items[0])), items[1]))
Ce jabaldonedo dit, +
split(' ')
divise la plupart de vos lignes dans une liste de plusieurs éléments, et pas seulement 2, parce que chaque ligne contient plusieurs espaces, pas un seul.Par exemple:
donc
items[1]
sera certainement pas vous donner ce dont vous avez besoin.Une solution rapide serait tout simplement de prendre le dernier élément de
items
en faisantitems[-1]
. Mais la meilleure façon de faire du fractionnement correctement (c'est à dire en utilisant des expressions régulières):Ou, si vous préférez ne pas utiliser des expressions régulières, un autre légèrement inelegante solution de contournement serait:
REMARQUE: je suis une utilisation interactive Python, dans le cas où vous poseriez la question sur le
>>>
préfixes.Mise à JOUR:
'2 0.1'.split()
(c'est à diresplit()
sans argument) semble faire exactement le même travail; c'est à dire qu'il se débarrasse des espaces multiples, pour ainsi dire. (merci, @hcwhsa).'2 0.1'.split()
est assez.split("2 0.1")
donne['2', '0.1']
... ne savais pas ça, pas du tout intuitif 🙂