0%

用Python统计花费

起因

不喜欢用现成的账本app记账,喜欢在手机记事本里记账,没次统计花费总额都需要按计算器,比较麻烦也不确定会不会按错,所以用Python写个脚本算算总共花费多少,额外也可以统计些自己想知道的数据。

账本格式

1
2
3
4
7.8 两餐-29 电费-57 开箱-30 充气宝-160
7.9 一餐-10 充话费-54
7.10 两餐-33 鼠标脚垫-11 早餐包-24
7.11 两餐-22 出行-7 理发-13

脚本代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
import matplotlib.pyplot as plt

'''
costStruct = [ {'date': '7.1', 'item': ['两餐'], 'consume': [33]},
{'date': '7.2', 'item': ['两餐', '遮阳布', '出行'], 'consume': [25, 6, 13]},
...
]
'''
costStruct = []
with open(file='cost.txt', mode='r', encoding='utf-8') as fp:
costStrList = fp.readlines()

# 删除空白行
delNum = 0
for i in range(len(costStrList)):
j = i - delNum
costStrList[j] = costStrList[j].strip('\n')
if len(costStrList[j].replace(' ', '')) == 0:
delNum = delNum + 1
del(costStrList[j])
# print(costStrList)

for i in range(len(costStrList)):
costDic = {'date': '', 'item': [], 'consume': []}
strList = costStrList[i].split(' ')
costDic['date'] = strList[0]
for j in range(1, len(strList)):
cost = strList[j].split('-')
costDic['item'].append(cost[0])
costDic['consume'].append(int(cost[1]))
costStruct.append(costDic)
# print(costStruct)

# 计算总共花费
dayCost = []
dateStr = []
for i in range(len(costStruct)):
dayCost.append(sum(costStruct[i]['consume']))
dateStr.append(costStruct[i]['date'])
print(costStruct[i]['date'] + ' cost ¥' + str(dayCost[i]))
print('total cost ¥' + str(sum(dayCost)))

# 绘图
plt.figure(figsize=(3+0.25*len(dayCost), 8), dpi=100) # 自适应长度
plt.bar(dateStr, dayCost)
plt.xticks(rotation=45)
plt.title('total cost ' + str(sum(dayCost)) + ' yuan')
plt.xlabel('date')
plt.ylabel('consume')
plt.show()

Github

代码存放在https://github.com/hao0527/costSummary,以后有新的统计分析需求,会直接在我的Github更新。