前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Python改善生活 | 轻松实现APP自动化记账

Python改善生活 | 轻松实现APP自动化记账

作者头像
快学Python
发布2021-08-09 11:25:21
8320
发布2021-08-09 11:25:21
举报
文章被收录于专栏:快学Python

大家好,我是小五

相信大部分人对于Python并非想掌握全栈知识,往往只是为解决工作/生活中的某些问题才开始学习的。

所以我打算写一些文章,介绍我从开始学Python到现在,写过的一些小工具/小技巧。好多都是我现在还在使用的,它们极大地节约了我的时间并提升工作效率。如果大家喜欢,请多多点赞支持,我会继续写这个系列的。

注:文中代码写的较早,可能不太简洁,大家主要理解思路即可

正文开始:


前情回顾

hi,我是小五

不知道大家有没有手动记账的习惯,我大概从大学开始就坚持记账,中途也换过几个账本APP。目前使用的是圈子账本 ,它的记账界面如下图所示:

再说说我现在的情况,毕业之后支出越来越多越琐碎,每月的账单多到再手动记账有些过于浪费时间了。

不过有几点让我注意到了,似乎可以实现自动化记账:

一是我目前支出首选信用卡(支付宝、微信也绑定信用卡),几乎全部支出都在这里;

二是圈子账本可以通过上传模板文件来直接上传账单,现在也支持支付宝账单了;

三是我的支出类别比较单一,主要就下面几种:

折中方案

根据上面的几点,我搞了个折中的方案,并一直用到现在。

就是电脑登录信用卡官网,手动复制或者下载账单。

然后使用python调整成账本官网支持的格式,导出成excel格式,直接上传至官网。

下面给大家对比一下操作前和操作后的格式:

信用卡里的账单:

官网规定格式:

操作实战

先手动复制账单到excel里,先命名为测试数据.xlsx

然后我们开始使用python处理,导入数据

代码语言:javascript
复制
df = pd.read_excel('测试数据.xlsx',header = None)
df.head(6)

?每隔三行其实是一条数据,所以我们要跳行提取数据

代码语言:javascript
复制
df2 = pd.DataFrame(columns=['日期','时间','入账金额','交易说明'])

df2['日期'] = df.iloc[[ i+1 for i in range(0,len(df),3)],[0]].reset_index()[0]
df2['时间'] = df.iloc[[ i+2 for i in range(0,len(df),3)],[0]].reset_index(drop=True)
df2['入账金额'] = df.iloc[[ i+1 for i in range(0,len(df),3)],[1]].reset_index(drop=True)
df2['交易说明'] = df.iloc[[ i+2 for i in range(0,len(df),3)],[1]].reset_index(drop=True)

创建了一个df2,并从df中隔行提取数据,结果如下

调整格式

下一步调整格式,先参考目标格式要求:

代码语言:javascript
复制
df2['时间'] = df2['日期'].apply(lambda x : str(x).replace('00:00:00','')) + df2['时间'].apply(lambda x : str(x)[:-3])
df2['入账金额'] = df2['入账金额'].str.lstrip('入账金额:¥')
df2['交易说明'] = df2['交易说明'].str.lstrip('交易说明:财付通公司-')
df2 = df2.drop(columns = '日期')

这样我们就调整好了时间入账金额(金额)交易说明(备注),还剩下一个关键的值就是类别,其实我自己的消费类别没几个,可以简单的利用交易说明判断类别,无法分辨的类别归为其他。

代码语言:javascript
复制
def fenlei(comment):
    if '美团' in comment or '拉扎斯'in comment:
        data = "餐饮"
    elif '花小猪'in comment or '滴滴'in comment:
        data = "交通"
    elif '燃气'in comment or '电费'in comment:
        data = "水电燃气"
    elif '拼多多'in comment:
        data = "生活用品"
    else:
        data = "其他"
    return data

利用上面的函数,就可以统计出类别这一列的值。

其中拉扎斯指的是饿了么,大家查一下自己账单就知道了。至于其他的种类,大家根据自己实际情况改改就可。

另外再添加另外两个固定列,就齐了。

代码语言:javascript
复制
df2['分类'] = df2.apply(lambda x :fenlei(x['交易说明']), axis=1)
df2 = df2[df2['入账金额'].astype(float) > 0]
df2['类型'] = '支出'
df2['账户'] = '交通银行'
df2.head()

?这里面我还筛选了只大于0的入账金额,这是为了排除还款记录。

注:还款记录在信用卡账单里是负值

最后结果如下图所示:

导出数据

由于这次导出数据要固定格式,所以使用了openpyxl来向官网模板中直接写入,这样导入比较规范。

代码语言:javascript
复制
workbook = load_workbook(filename="朱小五.xlsx")
sheet = workbook.active
df2 = df2.iloc[:,[4,0,3,1,5,2]]
# 先删除第4行之后的旧数据,预计1000行完全够用
sheet.delete_rows(idx=2, amount=1000)
# 然后在进行添加数据
for row in df2.values.tolist():
    sheet.append(row)
    print(row)
print("已经保存到文件中")
workbook.save(filename="朱小五.xlsx")
workbook.close()

打开朱小五.xlsx,查看结果

没什么问题,将Excel导入账本官网中

完美导入

再打开手机记账APP

发现账单已经安安静静地躺在账本里啦!

以上就是小五平时利用Python自动化处理自己账本的全部内容了。

如果喜欢我的文章,记得点赞支持哦~

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-03-31,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 快学Python 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前情回顾
    • 折中方案
    • 操作实战
      • 调整格式
        • 导出数据
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档