2010-05-12 4 views
6

J'ai un gros fichier avec des nombres sous la forme 6,52353753563E-7. Il y a donc un exposant dans cette chaîne. float() meurt à ce sujet. Bien que je puisse écrire du code personnalisé pour pré-traiter la chaîne en quelque chose que je peux manger, je suis à la recherche de la façon pythonique de les convertir en un flottant (quelque chose comme une chaîne de format passée quelque part). Je dois dire que je suis surpris float() ne peut pas gérer les chaînes avec un tel exposant, c'est assez fréquent. J'utilise python 2.6, mais 3.1 est une option si besoin est.Analyse d'une chaîne représentant un flottant * avec un exposant * en Python

Répondre

13

Rien à voir avec l'exposant. Le problème est une virgule au lieu du point décimal.

>>> float("6,52353753563E-7") 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
ValueError: invalid literal for float(): 6,52353753563E-7 
>>> float("6.52353753563E-7") 
6.5235375356299998e-07 

Pour une approche générale, voir locale.atof()

+0

Correct. Incidemment, si vous tapez "6,52353753563E-7" dans l'invite Python, il est analysé comme le tuple (6, 5235.3753563) - assez évident pourquoi, il semble juste étrange. –

+0

Ah, merci. Je vais le marquer comme accepté quand le minuteur me le permet. – Lucas

+0

Sur une note connexe, puis-je faire en sorte que python reconnaisse la virgule? C# et Java peuvent le faire. De nombreux endroits dans le monde utilisent une virgule comme séparateur décimal. – Lucas

1

Votre problème n'est pas dans l'exposant mais la virgule. avec python 3.1:

>>> a = "6.52353753563E-7" 
>>> float(a) 
6.52353753563e-07 
Questions connexes