2012-02-18 8 views
8

Estoy tratando de convertir un conjunto de cadenas de un archivo txt a int dentro de una lista. Pude encontrar un buen fragmento de código que devuelve cada línea y luego procedí a intentar convertirlo a un int. El problema es que los números están en notación científica y obtengo este error: ValueError: literal inválido para int() con base 10: '3.404788e-001'.Convertir una cadena (con notación científica) a un int en Python

Este es el código que he estado jugando con

data = [] 
rawText = open ("data.txt","r") 

for line in rawText.readlines(): 
    for i in line.split(): 
     data.append(int(i)) 

print data[1] 
rawText.close() 
+0

No son solo "en notación científica"; ellos representan no enteros. ¿Exactamente qué resultado esperaba obtener para la entrada '3.404788e-001'? –

Respuesta

14

Uso float(i) o decimal.Decimal(i) para los números de punto flotante, dependiendo de la importancia de mantener la precisión es para usted.
float almacenará los números en el punto flotante IEEE de precisión de la máquina, mientras que Decimal mantendrá la precisión total, a costa de ser más lento. También puede iterar sobre un archivo abierto, no necesita usar readlines().
y una lista única de comprensión puede hacer todo lo que necesita:

data = [float(number) 
     for line in open('data.txt', 'r') 
     for number in line.split()] 

Si sólo se necesita enteros, puede utilizar int(float(number))

4

La cadena se parece a un float, así convertirlo en un float primero.

Cuestiones relacionadas