【发布时间】:2016-09-17 18:47:00
【问题描述】:
我正在编写一个代码,它会查看银行对账单并根据它们所在的月份将费用/收入汇总到存储桶中。数据为 csv 格式,并以字符串条目的形式读取。 csv 文件有 5 列:第 1 列是日期,4 列是费用,5 列是收入。
代码应该:
- 在 csv 的日期字符串中查找月份。
- 将费用/收入添加到相应的字典中。
我在尝试将费用(格式:“$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
【问题讨论】:
-
“我遇到了障碍”。请更详细地描述您遇到的问题。你的代码会抛出错误吗?哪一个?在哪里?
-
不要使用
float来赚钱。使用Decimal并删除$s 这样做:decimal.Decimal('$ 33.50'.replace('$', '')) -
障碍的意思是我所描述的:不能将第 4 列加到字典中,因为字符串不会转换为数字。并且没有错误。我是编程新手,请耐心等待...
-
我得到十进制。用户代码未处理 InvalidOperation 消息:[
] 当我尝试使用 decimal.Decimal (row[4].replace('$' , ''))。 row[4] 中的负数用括号表示。会不会是因为这个?我也可以使用替换方法替换多个字符吗?怎么样?
标签: python string csv dictionary sum