2013-09-03 3 views
1

Я извлек данные из файла csv с помощью python. данные в файл csv выглядит в следующем формате:Выполнение арифметической операции в списке строк

a=(10100*b)+(-1289201*c)+(12312312*d) 

Я написал код, чтобы извлечь его из файла CSV.

ar=[] 
ins = open(log,"r") 
for line in ins: 
     ar.append(line) 
ins.close() 

так, ar[0]='a=(10100*b)+(-1289201*c)+(12312312*d)'

Теперь, мне нужно subsitute значения В, С и D с конкретными переменными с плавающей точкой.

Итак, я сделал следующее:

map = [ ('b','10'), ('c', '20'), ('d','100') ] 
for k, v in map: 
ar[0] = ar[0].replace(k,v) 

Проблема теперь я не могу делать никаких арифметических операций на конечный результат, то есть выход в следующем формате.

`ar[0]='a=(10100*10)+(-1289201*20)+(12312312*100)'` 

Есть ли способ, которым я могу выполнить некоторую арифметическую операцию в следующем формате списка. Я попытался снять список, но это не помогло.

ответ

4
>>> s = 'a=(10100*10)+(-1289201*20)+(12312312*100)' 
>>> index = s.find('=') + 1 
>>> eval(s[index:]) 
+0

Получаем ошибку: объект 'list' не может быть вызван. - это 'eval' список? – pistal

+0

ах, мой плохой. http://docs.python.org/2/library/functions.html#eval – pistal

+0

:) Тогда это сработало? – moliware

0

Ответ выше довольно хорош. вот еще один способ с 1 линия меньше:

>>> s = 'a=(10100*10)+(-1289201*20)+(12312312*100)' 
>>> exec s 

вы можете проверить вывод:

>>> a 
1205548180 

exec оператор используется для выполнения выражений, а не только оценить.