2016-04-11 10 views
0

Ich versuche, eine Textdatei zu lesen und drehen die Eingabe in Listen:ValueError: Konnte Zeichenfolge in Float nicht konvertieren.

model = open('Grids/Dusty_AGN/Z'+Z+'_n'+n+'_alp-'+alpha+'_fluxes.txt','r') 

Hafluxfile = model.readline() + model.readline() + model.readline() ; the first three lines of the file contain the values that I need 

Haflux = [] 

Haflux.append([float(x) for x in Hafluxfile.split(' ')]) 

Wenn ich print Hafluxfile, das ist, was ich sehe:

2.97500  2.94300  2.92700  2.91800  2.90700  2.90200 
    2.89300  2.87700  2.86700  2.87000  2.89900  2.93500 
    2.91900 

und dann beende ich mit diesem nach oben Fehlermeldung beim Versuch, die Liste Haflux anhängen:

ValueError: could not convert string to float

und nein, es gibt nichts, was ich nicht über den Doppelpunkt enthalten, es scheint mir zu sagen, dass Leerraum verhindert, dass es zur ersten Nummer kommt? Ich weiß nicht, wie ich das umgehen soll.

Antwort

2

Sie haben mehrere Leerzeichen zwischen den Elementen. Sie nicht das Trennzeichen angeben, wenn split() Aufruf:

If sep is not specified or is None, a different splitting algorithm is applied: runs of consecutive whitespace are regarded as a single separator, and the result will contain no empty strings at the start or end if the string has leading or trailing whitespace.

Und es sieht aus wie Sie auch führende und nachfolgende Leerzeichen, die Sie mit strip() trimmen:

[float(x) for x in Hafluxfile.strip().split()] 
+0

funktionierte perfekt, danke! –

0

Das Problem ist, Sie werden immer einige leere Elemente.

Haflux.append([float(str(x)) for x in Hafluxfile.split(' ') if len(x)>1]) 

Dies wird sich um sie kümmern.

-1

Von meinem sehr begrenzten Verständnis von Python ist es schlau genug, die Zeichenfolge automatisch in einen Gleitkommawert umzuwandeln, vorausgesetzt, dass in der Zeichenfolge, die nicht numerisch ist, kein anderes Zeichen vorhanden ist. Sie sollten versuchen, über Ihre Datei zu iterieren und isDigit() auf jeder Ihrer Nummer anzurufen, um zu sehen, ob es versteckte neue Zeilenzeichen oder etwas dieser Art gibt. Oder ist das Problem, dass es nicht über die Liste iteriert?

0

Zuerst sollten Sie Ihre Pfadkomponente verketten mit +, stattdessen sollten Sie die os.path.join Funktion verwenden. Dazu würde ich das csv Modul verwenden.

import os 
import csv 

haflux = [] 
filename = os.path.join('Grids/Dusty_AGN/Z', Z, '_n', n, '_alp-', alpha, '_fluxes.txt') 
with open('filename') as f: 
    reader = csv.reader(f, delimiter=' ') 
    for n in range(3): 
     haflux.append([float(i) for i in next(reader) if i]) 

print(haflux) 
# [[2.975, 2.943, 2.927, 2.918, 2.907, 2.902], [2.893, 2.877, 2.867, 2.87, 2.899, 2.935], [2.919]] 
Verwandte Themen