2016-04-11 2 views
0

Я пытаюсь прочитать в текстовый файл и включить ввод в списки:ValueError: не удалось преобразовать строку в float.

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(' ')]) 

Если я print Hafluxfile, это то, что я вижу:

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 

, а затем я в конечном итоге с этим сообщение об ошибке при попытке добавить в список Haflux:

ValueError: could not convert string to float

и нет, нет ничего, что я не включил за толстой кишки, кажется, говорит мне, что пробел мешает ему добраться до первого номера? Я не знаю, как обойти это.

ответ

2

У вас есть несколько мест между пунктами. Не указать разделитель при вызове split():

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.

И, похоже, у вас также есть ведущие и ведомые пробелы, которые вы можете обрезать с strip():

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

работал отлично, спасибо! –

0

Проблема заключается в том, что вы получаете некоторые пустые элементы.

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

Это позаботится о них.

-1

Из моего очень ограниченного понимания Python он достаточно умен, чтобы преобразовать строку в float автоматически при условии, что в строке, которая не является численной, нет другого символа. Вы должны попробовать выполнить итерацию по файлу и вызвать isDigit() на каждом из ваших номеров, чтобы увидеть, есть ли скрытые символы новой строки или что-то в этом роде. Или проблема в том, что она не перебирает список вообще?

0

Прежде всего, вы должны конкатенировать свой компонент пути с помощью +, вместо этого вы должны использовать функцию os.path.join. Говоря это, я бы использовал модуль csv.

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]] 
Смежные вопросы