所在的位置: 绘图 >> 绘图发展 >> 自动化记账程序20

自动化记账程序20

需求背景:

为了更好地解放双手,提高记账效率,本人想要制作一个基于python的自动化记账程序,用于统计本人每星期、每月、每年,甚至是每日的盈亏记录,目前该程序是处于半自动化状态,后期会逐渐更新,争取全套流程纯自动化,不需要过多的人工参与,摆脱苦哈哈记账统计的耗时任务

需求总目标:

日账目:连接常用的支付通信软件,将自己每花费一笔,就自动归类在一个临时存储位置,然后这个临时存储位置可以用excel格式记录存储,并将其下载到指定的电脑桌面位置

星期账目:对一星期的花销和盈收做出统计,并用图的方式展示各种类型花销情况和收入情况

月账目:对一个月(即四个星期)的花销和盈收做出统计,并用图的方式展示各种类型花销情况和收入情况

年账目:对一年(即12个月)的花销和营收做出统计,并用图的方式展示各种类型花销情况和收入情况

唠嗑本次记账程序2.0出现背景:

上次写过一篇记账程序1.0,我对其中含有的漏洞进行填坑。这里有传送门:自动化记账程序1.0;简短回顾一下,上次的程序只是对一星期的的总收支和总收入搜集并统计,并实时计算出剩余的余额还有多少。可是这未免过于单调,因为这个只能是简单描述,并不能让人更加清晰知道自己的收入是在哪一块占据的多?自己的支出是在哪一块占据的多?并且纯数字的展示,会不会对数字不敏感的人不友好呀(比如说本人)

本次记账程序2.0的目标:

对上次的记账程序1.0做出改进,额外增加对收/支种类的展述和对收/支种类的数据统计,并叠加对一星期总收入、总支出和剩余额的柱状图呈现,和对收/支出种类的数据统计的饼图呈现。

具体内容前期准备工作

这次实现记账程序2.0的准备工作,是基于上次的记账程序1.0,这里有传送门:自动化记账程序1.0;除此之外,还要额外下载一个新python库,名为xlsxwriter库,这个库秒杀之前我给你们介绍的xlwt库,它不仅能写入数据,还能绘图,也支持xlsx格式的文件。如何下载,这里我因为篇幅原因,就只抛出核心代码:pipinstallxlsxwriter,具体如何操作,可以回顾我文章,这里有传送门:自动化记账程序1.0

编码思路:

在实现自动化记账程序时,容我先捋清一下思路:

1.思想认识上,这个是基于文章的思路并进行改良,额外新增对一星期收/支类别统计,并以可视化图形呈现的,第一次看这篇文章的一定要回顾上一期我写过的记账程序1.0呀

2.对新增部分首先要对原本excel模板做出改进

3.记录单表情况下,对收/支种类的名称获取,并将其中涉及到每个收/支的金额做统计

4.然后扩大范围,从记录单表到扩大到多表(即从年5月30号到年6月5号的记账表)

5.接下来就是对图形的绘制了,这里包括绘制收入、支出和剩余利润的柱形图和收/支的类别数据的饼图

6.并将统计到的数据结果使用xlsxwriter库写入到excel表中,当然,本次不会再使用xlwt库,将会对原本程序1.0的写入excel代码做出改变

7.打包成.exe脚本,这里就不会详细介绍实现过程,只抛出核心代码和结果,不懂的可翻阅我写过的记账程序1.0

开始编码:

编码思路认识清楚后,就愉快编码了:

excel模板改造

以上这副图是程序1.0的excel模板

以上这幅图是改良后,程序2.0的excel模板

这个在接下来程序定位获取数据的时候很重要,如果是小白,可以对照查看

导入第三方库

这里要导入三个python库,分别是xlrd库、calendar、xlsxwriter

导入库的源码如下

importxlrd#从Excel文件读取数据和格式化信息的库,支持.xls以及.xlsx文件importcalendar#导入日历库importxlsxwriter#用于将数据和格式化信息写入Excel文件的库

这里要提醒一下,我已经抛弃了xlwt库,用xlsxwriter库来替代xlwt库了。

对收/支出种类描述做单表统计

要实现收/支出种类描述做单表统计,可以先从如何实现支出种类描述的单表统计开始,思路是:

打开文件--选择要统计数据的表格--获取数据--用函数来进行封装

对单表的支出种类描述统计的源码如下:

#获取最完整的支出分类字典,其中end_time为结束时间:defget_full_pay_series(end_time):#存储完整的支出种类名称full_pay_series={}#确定文件路径excel_url=str(end_time)#打开xlsx的文件data=xlrd.open_workbook(excel_url)#打开第一张表table=data.sheets()[0]#获取第四行的种类数据pay_series=table.row_values(3)#去除种类列表里的空值:while""inpay_series:pay_series.remove("")#将完整的种类遍历,并存储到full_series字典中,并设置其默认值是0forsingle_seriesinpay_series[1:]:full_pay_series.setdefault(single_series,0)    returnfull_pay_series

同理,获取单表收入种类的方法也是类似的。

对单表的收入种类描述统计的源码如下:

#获取最完整的收入分类字典,其中end_time为结束时间:defget_full_in


转载请注明:http://www.yiyixiexie.net/zlff/202503/11460.html