2016-07-17 2 views
0

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

mealReturnValue = re.findall("\d+\.\d+",lines[2]) 

Пример файл строка он вытягивает из: «Общего Счет был 400,00 "

Это возвращает список чисел следующим образом:

[['400.00'], ['210.0'], ['400.00']] 

Я тогда пытаюсь подвести список, однако, он выдает следующее сообщение об ошибке:

Traceback (most recent call last): 
    File "TotalSpend.py", line 25, in <module> 
    totalSpend = sum(mealReturn) 
TypeError: unsupported operand type(s) for +: 'int' and 'list' 

Это похоже на функцию re.findall, поскольку я смог сделать это вручную, создав массив из тех же чисел.

Например:

i = [400.00, 210.0, 400.00] 

print sum(i) 

Так я не знаю, что реальная проблема здесь, я не могу показаться, чтобы преобразовать re.findall к поплавку я могу использовать в списке.

Любая помощь была бы принята с благодарностью.

Для дополнительной ясности весь код файла:

import os 
import sys 
import re 


dirListing = os.listdir('C:\Users\joshnathan\Desktop\LPTHW') 
mealReturn =[] # Array of returned meal values 
numberOfMeals = 0 

print "Which meal do you want to calculate?" 
meal = raw_input(">>") 


for item in dirListing: 
    if meal in item: 
     numberOfMeals += 1 
     fileName = open(item, 'r') 
     lines = fileName.readlines() 
     mealReturnValue = re.findall('\d+\.\d+',lines[2]) 
     mealReturn.append(mealReturnValue) 
     print mealReturn 


print numberOfMeals 
totalSpend = sum(mealReturn) 
print totalSpend 

Благодаря Джошуа

+1

* Это возвращает список чисел следующим образом * - мммм ... 're.findall' не вернется, что ... вы уверены, что не делаете что-то еще, что вы не показываете нам? (например, при добавлении к списку каждый раз?) –

+0

Добавлен полный файл кода для справки. Спасибо за обновление! – ImNewToThis

ответ

0

Попробуйте это.

In [1]: sum([float(i[0]) for i in a]) 
Out[1]: 1010.0 

Рассчитано a как ваш результат. Вы пытаетесь выполнить операцию sum в списке списка. И это в строчном формате. Вы должны преобразовать в float и сделать его как единый список. Затем вы можете выполнить операцию sum.

Шаги

1. Сделать это как единый список

In [2]: [i[0] for i in a] 
Out[2]: ['400.00', '210.0', '400.00'] 

2. Преобразовать все элементы для float

In [3]: [float(i[0]) for i in a] 
Out[3]: [400.0, 210.0, 400.0] 

3. Выполните операцию суммирования.

In [4]: sum([float(i[0]) for i in a]) 
Out[4]: 1010.0 

Редактировать

mealReturnValue = re.findall('\d+\.\d+',lines[2]) будет возвращать что-то вроде этого [['400.00']] Таким образом, вы можете преобразовать его в поплавок там себя, как этот mealReturnValue = float(re.findall('\d+\.\d+',lines[2])[0]). И вместо append в строку вы можете добавить переменную. mealReturnValue += re.findall('\d+\.\d+',lines[2]). Чтобы использовать это, вы должны объявить mealReturnValue.Как это mealReturnValue = 0

изменения вы код, как этот

totalSpend = 0 
for item in dirListing: 
    if meal in item: 
     numberOfMeals += 1 
     fileName = open(item, 'r') 
     lines = fileName.readlines() 
     totalSpend += float(re.findall('\d+\.\d+',lines[2])[0]) 

print numberOfMeals 
print totalSpend 
+0

Привет, Рахул, спасибо за это обновление, он многое объясняет. Если я правильно понимаю, несмотря на использование re.findall для вытягивания переменных, которые отображаются как float, они сохраняют их как строку. Поэтому мне нужно преобразовать переменные в список из строки в float. На основе вашего примера это сначала генерирует список и преобразует список в float после? Есть ли способ сделать это на лету, поэтому для каждой переменной он сохраняет его как поплавок в первый раз? Я добавил свой полный код выше для справки im просто интересно, могу ли я заставить forceReturnValue быть float, когда он хранится? – ImNewToThis

+0

@ImNewToThis Обновлен мой вопрос, проверьте его. –

+0

спасибо за обновление об этом. Делает полный смысл. Очень ценю помощь! – ImNewToThis

0

Вы пытаетесь подвести список списков строк.

При суммировании, следует суммировать значения как поплавки:

sum(float(num[0]) for num in mealReturnValue) 
>> 1010.0 
+0

Большое спасибо за это. Это работало очень хорошо. Могу ли я спросить, как хранить переменные в списке как плавающие, поэтому мне не нужно их исправлять в конце? – ImNewToThis

 Смежные вопросы

  • Нет связанных вопросов^_^