2016-05-20 8 views
0

私は銀行の明細書を見て、落ち込んだ月に応じて経費/収入をバケットに集計するコードを書いています。データはCSV形式で読み込まれています文字列のエントリとして。 csvファイルには、カラム1は日付、費用は4、費用は5、収入は5です。Python 3:結果を辞書に集計する方法

コードが必要です。

  1. は、CSVから日付文字列に月調べなさい。
  2. 費用/所得をそれぞれの辞書に追加します。

経費(形式: "$ 0.00")をフロートに変換して辞書に集計しようとしました。誰でも私がここで何ができるのか教えていただけますか?ここで

はコードです:

import numpy as np 
import csv 
import timestring as ts 


months= [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12] 
expenses = {1:0, 2:0, 3:0, 4:0, 5:0, 6:0, 7:0, 8:0, 9:0, 10:0, 11:0, 12:0} 
income = {1:0, 2:0, 3:0, 4:0, 5:0, 6:0, 7:0, 8:0, 9:0, 10:0, 11:0, 12:0} 
exp_cat = [] 
income_cat = [] 

files =['export.csv', 'export1.csv'] 

with open("budgetfile.csv","wt") as fw: 
    writer = csv.writer(fw) 
    for file in files: 
     with open(file) as csvfile: 
      records = csv.reader(csvfile, quoting=csv.QUOTE_NONE) 
      print("Processing file {}. \n" .format(file)) 
      header = next(records) 
      for row in records: 
       try: 
        expenses[ts.Date(row[0]).month] += float(row[4]) 
        income[ts.Date(row[0]).month] += float(row[5]) 
        break 
       except ValueError: 
        pass  
+4

を試してみてください。問題点をより詳しく記述してください。コードがエラーをスローしますか?どちら?どこ? –

+1

お金には 'float'を使わないでください。 decimal.Decimal( '$ 33.50'.replace(' $ '、' ')) ' –

+0

私が記述したことを意味しています:列4を辞書に集計することはできません文字列は数字に変換されないためです。エラーはありません。 – Chuck

答えて

1

は "私が暗礁に乗り上げる" この

import numpy as np 
import csv 
import timestring as ts 
import decimal 
from collections import defaultdict 


months= [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12] 
expenses = defaultdict(decimal.Decimal) 
income = defaultdict(decimal.Decimal) 
'''Optional for less imports 
expenses = {x:decimal.Decimal() for x in months} 
income = {x:decimal.Decimal() for x in months} 
''' 
exp_cat = [] 
income_cat = [] 

files =['export.csv', 'export1.csv'] 

with open("budgetfile.csv","wt") as fw: 
    writer = csv.writer(fw) 
    for file in files: 
     with open(file) as csvfile: 
      records = csv.reader(csvfile, quoting=csv.QUOTE_NONE) 
      print("Processing file {}. \n" .format(file)) 
      header = next(records) 
      for row in records: 
       try: 
        expenses[ts.Date(row[0]).month] += decimal.Decimal(row[4].replace('$', '')) 
        income[ts.Date(row[0]).month] += decimal.Decimal(row[5].replace('$', '')) 
        break 
       except ValueError: 
        pass 
+1

これでupvoteが手に入りました! –

+1

浮動小数点数についてはあまりにも薄すぎます。 –

+0

は上記のコードを使用し、MS Visual Studio 2015でこのエラーを受け取りました: "InvalidOperationはユーザーコード" []で処理されませんでした。最後のかっこを指します。 – Chuck

関連する問題