2016-07-13 18 views
0

私は3列のデータを含むリストを取る単純なスクリプトを持っています。データの2番目の列には、ドル記号の先頭に通貨の値が含まれています。私は2番目の列からドル記号を取り除いたので、今度は値を加算する必要があります。私は "decimal.Decimalはiterableではありません"エラーを取得しています。コードは次のとおりです。decimal.Decimalは反復可能なエラーではありません

from decimal import Decimal 

def main(): 
total = 0.0 


try: 
    infile = open('list.txt', 'r') 

    for i in infile: 
     parts = i.split() 
     if len(parts) > 1: 
      dollar_dec = Decimal((parts[1]).strip('$')) 
      total = sum(dollar_dec) 
      print (total) 

    infile.close() 


except Exception as err: 
       print(err) 

main() 

答えて

1

言って、次のファイルの内容があります。

content = """\ 
one $1.50 
two $3.00 
three $4.50""" 

をあなたはにインプレース演算子+=を使用することができます合計を計算:

from decimal import Decimal 
import io 

total = Decimal(0) 
with io.StringIO(content) as fd: 
    for line in fd: 
     parts = line.strip().split() 
     if len(parts) > 1: 
      dollard_dec = Decimal(parts[1].strip("$")) 
      total += dollard_dec 

print(total) 

彼女を、あなたが得る:9.00

また、(理解一覧はこちら)反復可能でsum()を使用することができます。

with io.StringIO(content) as fd: 
    total = sum(Decimal(line.strip().split()[1].strip("$")) 
       for line in fd) 
print(total) 

はい、あなたも9.00を入手します!

+0

合計=小数点(0)がトリックをしました。ありがとう! – brohjoe

0

sum()が反復可能です。ただ、total += dollar_dec

+0

in_file:content = in_file.read() 'のようにファイルを読み書きするには、with文を使用する必要があります:' 'with io.open(" list.txt "、mode =" r ")。 –

+0

@LaurentLAPORTEもしあなたが良いアドバイスをするつもりならば、悪いアドバイスもしないでください。 OPは(すでに) 'for i in infile'を使ってファイルを反復しています。ファイル全体を読み取ると、2,000,000行のファイルを処理しようとすると問題が発生する可能性があります。 –

+0

あなたは正しいです。私はここに短いコメントを書いたがっていた。ごめんなさい。 –

1
total = sum(dollar_dec) 

合計にあなたのコードを変更する()(例えば、リスト)のiterableを取り、すべての値を加算します。単一の数値を渡していますが、これはエラーです。あなたはおそらく望むでしょう

total = Decimal('0.0') 
... 
total += dollar_dec 

これは、稼働合計を維持します。

(あなたがそれに小数を追加するために編集 - 合計は小数でなければなりません)

+0

私はまだtotal + = dollar_decで同じエラーが発生しています – brohjoe

+0

@brohjoe:全く同じエラーが発生しているのではないでしょうか?コードに複数のバグがあります。 – user2357112

+0

+ =: 'float'と 'decimal.Decimal'のオペランドタイプがサポートされていません – brohjoe

関連する問題