2016-07-17 99 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

你好Rahul,感謝這次更新,它解釋了很多。如果我理解正確,儘管使用re.findall來拉出浮動變量,它將它們存儲爲一個字符串。所以我需要將列表中的變量從字符串轉換爲浮點。根據你的例子,這首先生成列表並將列表轉換爲浮動後? 有沒有什麼辦法可以在飛行中這樣做,因此對於每個變量,第一次將它存儲爲浮點數?我已經添加了我的完整代碼以供參考我只是想知道我可以強制mealReturnValue存儲時它是一個浮點數? – ImNewToThis

+0

@ImNewToThis更新我的問題檢查它。 –

+0

感謝您對此的更新。完全意義。真的很感謝幫助! – ImNewToThis

0

您正在嘗試總結字符串列表的列表。

總結時,您應該總結的值作爲花車:

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

非常感謝您的支持。這工作得很好。我可以問,我如何將變量存儲在列表中作爲浮點數,所以我不必在最後修改它們? – ImNewToThis