2016-07-17 3 views
0
私は、ファイル内の特定の行からfloatを返すように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) 

、私は、リストで使用できるfloatに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に変換して1つのリストにする必要があります。その後、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])ですから、このmealReturnValue = float(re.findall('\d+\.\d+',lines[2])[0])ようにそこフロートに自分自身を変換することができ、この[['400.00']]のようなものを返します。文字列に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

関連する問題