2010-05-12 13 views
6

Tengo un archivo grande con números en forma de 6,52353753563E-7. Entonces hay un exponente en esa cadena. float() muere en esto.Analizando una cadena que representa un flotante * con un exponente * en Python

Si bien podría escribir código personalizado para preprocesar la cadena en algo que float() puede comer, estoy buscando la manera pitónica de convertirlos en un flotador (algo así como una cadena de formato pasada a alguna parte). Debo decir que estoy sorprendido de que float() no pueda manejar cadenas con dicho exponente, esto es bastante común.

Estoy usando Python 2.6, pero 3.1 es una opción si es necesario.

Respuesta

13

Nada que ver con el exponente. El problema es una coma en lugar de un punto decimal.

>>> 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 

Para un enfoque general, ver locale.atof()

+0

Correcto. Por cierto, si escribe "6,52353753563E-7" en el indicador de Python, se analiza como la tupla (6, 5235.3753563), bastante obvio por qué, parece extraño. –

+0

Ah, gracias. Lo marcaré como aceptado cuando el temporizador me lo permita. – Lucas

+0

En una nota relacionada, ¿puedo de alguna manera hacer que python reconozca la coma? C# y Java pueden hacer esto. Muchos lugares en el mundo usan una coma como el separador decimal. – Lucas

1

Su problema no está en el exponente pero en la coma. con python 3.1:

>>> a = "6.52353753563E-7" 
>>> float(a) 
6.52353753563e-07 
Cuestiones relacionadas