Я добавляю в список из CSV, который выглядит следующим образом

SampleA,Type,3.782*0.0627

Тогда vals = line.split(',')

Итак, я попробовал что-то вроде value = float(str(vals[2])) или value = float(vals[2])

Но я получаю ошибки вроде ValueError: invalid literal for float(): 3.782*0.0627

Так что я хочу, чтобы в основном сохранить в value = 0.237 то есть результат мутации

Tia

1
Terma 31 Май 2020 в 21:10

3 ответа

Лучший ответ

Вам необходимо выполнить операцию 3.782*0.0627 «вручную». Вы можете сделать это так:

value1, value2 = map(float, vals[2].split("*"))
value = value1 * value2

Но если есть вероятность, что вы можете столкнуться с какой-либо другой операцией в vals[2], вы должны реализовать логику обработки для каждого случая.

Кроме того, если вы анализируете CSV, рассмотрите возможность использования стандартной библиотеки Python CSV

1
Pavel Botsman 31 Май 2020 в 18:13

Принятый ответ не обрабатывает случай, когда существует только одно значение, для которого я бы предложил (Python 3.8 или более поздняя версия)

from math import prod

value = prod(map(float, vals[2].split("*")))

Или аналогично

from math import prod

value = prod(float(x) for x in vals[2].split("*"))
1
SimonN 31 Май 2020 в 18:50

Вы можете рассчитать поплавок первым.

floats = vals[2].split('*')
value = float(floats[0]) * float(floats[1])
2
kochjo 31 Май 2020 в 20:14