2012-02-18 38 views
8

Sto provando a convertire un set di stringhe da un file txt in int all'interno di un elenco. Sono stato in grado di trovare un bel frammento di codice che restituisce ogni riga e quindi ho proceduto a provare e convertirlo in un int. Il problema è che i numeri sono in notazione scientifica e ottengo questo errore: ValueError: letterale non valido per int() con base 10: '3.404788e-001'.Conversione di una stringa (con notazione scientifica) in un int in Python

Questo è il codice che ho nei guai 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

Non sono solo "in notazione scientifica"; rappresentano non interi. Esattamente quale risultato speravi di ottenere per l'input "3.404788e-001"? –

risposta

14

Usa float(i) o decimal.Decimal(i) per i numeri in virgola mobile, a seconda di quanto sia importante la precisione il mantenimento è a voi.
float memorizzerà i numeri in virgola mobile IEEE a precisione di macchina, mentre Decimal manterrà la massima precisione, al costo di essere più lento.
Inoltre, è possibile scorrere su un file aperto, non è necessario utilizzare readlines().
E una lista unica di comprensione può fare tutto ciò che serve:

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

Se si ha realmente bisogno solo numeri interi, è possibile utilizzare int(float(number))

4

La stringa si presenta come un float, quindi convertirlo in un float prima.

Problemi correlati