Проблемы с изменением текстового файла

У меня есть текстовый файл с кучей данных на нем вместе с кодом, который выводит диаграмму рассеяния, мне нужно использовать переменные в текстовом файле для вычисления новой переменной a_mag, чтобы заменить данный v_mag на графике, но Я застрял на следующих строках:

for line in lines:
    column = line.split()    
    starID.append(float(column[0]))
    v_mag.append(float(column[1]))
    b_v.append(float(column[2]))
    parallaxes.append(float(column[3]))
    parallax_error.append(float(column[4]))
    d.append(float(1/column[3])) # Distance to star
    a_mag.append(float(column[1]-(5*math.log10(1/column[3]/10))))

d и a_mag - новые переменные с d, необходимым только для вычисления a_mag, код ошибки следующий:

 22     parallaxes.append(float(column[3]))
 23     parallax_error.append(float(column[4]))
---> 24     float(d.append(1/column[3])) # Distance to star
 25     a_mag.append(float(Column[1]-(5*math.log10(1/Column[3]/10)))) # Absolute V Magnitude
 26 

TypeError: unsupported operand type(s) for /: 'int' and 'str'

Заранее спасибо :)

Можете ли вы добавить свой образец ввода и желаемого результата?

Vikas P 31.10.2018 12:33

Вы пытаетесь разделить int и str, как говорится в сообщении об ошибке. Вам необходимо преобразовать Column[1] и Column[3] в float перед разделением, как вы это делали выше, когда append помещал их в списки.

user2556381 31.10.2018 12:33
1
2
20
1

Ответы 1

По какой-то причине установка float перед каждым отдельным столбцом [x] в строках 24 и 25 исправила это.

d.append (float (1 / float (Столбец [3]))) A_Mag.append (float (float (Столбец [1]) - (5 * math.log10 (1 / float (Столбец [3]) / 10))))

Cillian12421 31.10.2018 12:38

Не «по какой-то причине»! Причина вполне ясна и очевидна: Column - это список строк, поэтому Colum[x] - это строка (для всех допустимых значений x), поэтому попытка разделить int или float на строку, конечно, вызовет TypeError, поскольку деление числа на строку не имеет смысла. вообще.

bruno desthuilliers 31.10.2018 13:33

@ Cillian12421 вам не нужно везде ставить float - просто преобразуйте каждый столбец в float, сохраните его где-нибудь, а затем используйте преобразованное значение. Когда вы читаете из файла - это все строки, а не числа. Кстати: используйте соглашение Python для именования переменных

Michał Zaborowski 31.10.2018 13:42

Другие вопросы по теме