Comment convertir une chaîne de caractères en Float ou Int en Python
-
float()
pour convertir une chaîne de caractères en float en Python -
int()
pour convertir la chaîne en int en Python -
ast.literal_eval
pour convertir la chaîne en float ou int en Python - Localisation et virgules dans la conversion d’une chaîne de caractères en Python
- Comparaison des performances de différentes méthodes pour convertir des chaînes de caractères en float ou int en Python
Cet article du tutoriel présente comment convertir une chaîne de caractères en float ou en int en Python.
float()
pour convertir une chaîne de caractères en float en Python
float()
convertit la chaîne de caractères en nombre de pointage float
, si possible.
>>> float('111.2222')
111.2222
>>> float('111.0')
111.0
>>> float('111')
111.0
int()
pour convertir la chaîne en int en Python
int()
pourrait convertir la chaîne en un entier si la chaîne donnée est la représentation d’un entier. Sinon, il va générer une ErreurValeur
.
>>> int('111')
111
>>> int('111.0')
Traceback (most recent call last):
File "<pyshell#43>", line 1, in <module>
int('111.0')
ValueError: invalid literal for int() with base 10: '111.0'
>>> int('111.22222')
Traceback (most recent call last):
File "<pyshell#45>", line 1, in <module>
int('111.22222')
ValueError: invalid literal for int() with base 10: '111.22222'
Vous pouvez d’abord convertir la chaîne en float
et ensuite la lancer en int
si la chaîne donnée est la représentation d’un nombre à virgule float.
>>> int(float('111.0'))
111
ast.literal_eval
pour convertir la chaîne en float ou int en Python
ast.literal_eval(string)
évalue en toute sécurité la chaîne donnée contenant une expression Python. Il peut convertir la chaîne en float
ou int
automatiquement.
>>> ast.literal_eval('111.2222')
111.2222
>>> ast.literal_eval('111.0')
111.0
>>> ast.literal_eval('111')
111
Localisation et virgules dans la conversion d’une chaîne de caractères en Python
Si la virgule ,
existe dans la représentation de la chaîne de caractères, alors la conversion float
lancera une exception ValueError
. Mais les virgules sont généralement utilisées soit comme séparateur de milliers dans des pays comme les Etats-Unis ou le Royaume-Uni, par exemple 111,111.22
, soit comme séparateur décimal dans la plupart des pays européens, par exemple 111,222
.
>>> float('111,111.22')
Traceback (most recent call last):
File "<pyshell#54>", line 1, in <module>
float('111,111.22')
ValueError: could not convert string to float: '111,111.22'
>>> float('111,111')
Traceback (most recent call last):
File "<pyshell#55>", line 1, in <module>
float('111,111')
ValueError: could not convert string to float: '111,111'
Le module locale
devrait être utilisé pour assigner les informations locales et ensuite la fonction locale.atof()
pourrait analyser la chaîne donnée comme un float selon les paramètres locaux.
Les virgules comme séparateur de milliers aux Etats-Unis ou au Royaume-Uni
>>> import locale
>>> A = '111,111.222'
>>> locale.setlocale(locale.LC_ALL, 'en_US.UTF-8')
'en_US.UTF-8'
>>> locale.atof(A)
111111.222
>>> locale.atof('111,111')
111111.0
La virgule ,
pourrait être interprétée correctement si le bon paramètre de locale est donné.
Soyez également conscient que le résultat de la conversion est toujours de type float
même si la représentation de la chaîne donnée est un entier.
Les virgules comme marque démique dans les pays européens
>>> import locale
>>> locale.setlocale(locale.LC_ALL, 'nl_NL')
'nl_NL'
>>> locale.atof('111,222')
111.222
>>> locale.atof('111.111,222')
111111.222
111,222
est converti correctement en 111.222
, et 111.111,222
pourrait aussi être converti correctement en 111111.222
, car le point .
est utilisé comme séparateur de milliers dans les pays européens comme les Pays-Bas.
Comparaison des performances de différentes méthodes pour convertir des chaînes de caractères en float ou int en Python
Nous utilisons timeit
pour vérifier les performances d’efficacité entre les différentes méthodes.
>>> import timeint
>>> timeit.timeit('float(111.2222)', number=1000000)
0.14707240000007005
>>> timeit.timeit('ast.literal_eval("111.2222")', setup='import ast', number=1000000)
4.779956100000163
>>> timeit.timeit('locale.atof("111.2222")', setup='import locale; locale.setlocale(locale.LC_ALL, "en_US.UTF-8")', number=1000000)
6.092166299999917
La méthode ast.literal_eval()
est énormément plus lente que la méthode float
comme montré ci-dessus. Elle ne devrait pas être le premier choix si vous avez simplement besoin de convertir une chaîne de caractères en float ou en int en Python. La méthode ast.literal_eval()
est sur-enginée dans cette application car sa cible principale devrait être l’évaluation de la chaîne contenant l’expression Python.
locale.atof()
est aussi extrêmement lent, donc il ne devrait être utilisé que lorsque des virgules existent dans la chaîne pour la convention en US ou UK, ou le point .
signifie le séparateur de milliers mais la virgule ,
signifie la marque décimale dans les pays européens. En d’autres termes, vous devriez utiliser locale.atof()
si c’est vraiment nécessaire.
Founder of DelftStack.com. Jinku has worked in the robotics and automotive industries for over 8 years. He sharpened his coding skills when he needed to do the automatic testing, data collection from remote servers and report creation from the endurance test. He is from an electrical/electronics engineering background but has expanded his interest to embedded electronics, embedded programming and front-/back-end programming.
LinkedIn FacebookArticle connexe - Python String
- Supprimer les virgules de la chaîne en Python
- Comment vérifier qu'une chaîne est vide de manière pythonique
- Convertir une chaîne en nom de variable en Python
- Comment supprimer les espaces dans une chaîne de caractères en Python
- Comment extraire des nombres d'une chaîne de caractèresen Python
- Comment convertir une chaîne de caractères en datetime en Python