全文以工商银行的扣费信息为例

工行储蓄卡,绑定支付宝、微信后日常使用,偶尔会转入,日常收到的通知短信有支付、转入、信使展期扣费三类:

1. 您尾号1234卡1月2日20:57POS支出(快捷支付)100元,余额664.88元。【工商银行】

2. 您尾号7256卡2月3日15:35ATM收入(现存)8,000元,余额8,664.88元。【工商银行】

3. 您尾号1234卡4日02:55工商银行支出(信使展期)2元,余额8,662.88元。【工商银行】

最后的整理结果如图

screenshot.png

需要从每条短信中提取出来的信息有:日期、金额、方式、余额

第一、二类短信具有相同的格式,可以用同一个正则表达式提取信息,第三类缺少了一个日期,需要另写一个(存储的时候月份用00 代替)。

第一个正则表达式为:您尾号(\d{4})卡(\d{1,2})月(\d{1,2})日([\d:]+)(.+?)([\d.,]+)元,余额([\d.,]+)元。【工商银行】

第二个正则表达式为:您尾号(\d{4})卡(\d{1,2})日([\d:]+)(.+?)([\d.,]+)元,余额([\d.,]+)元。【工商银行】 ,区别在于少了月份。

留意扣费方式的匹配用了非贪婪模式 ?

读 xls 要用到 xlrd ,而本次是要写入 xls ,所以用的是 xlwt 模块

file = xlwt.Workbook() #新建文件,留意大小写

table = file.add_sheet('name') #新建一个sheet

table.write(行,列,值) #写入数据

table = file.add_sheet('sheet name',cell_overwrite_ok=True) #需要对同一个单元格重复写入覆盖数据

file.save('demo.xls') #保存文件

......

还能自定义字体等

最终代码如下

#!/usr/bin/python3

# -*- coding:utf-8 -*-

import re,xlwt

common = re.compile(u'您尾号(\d{4})卡(\d{1,2})月(\d{1,2})日([\d:]+)(.+?)([\d.,]+)元,余额([\d.,]+)元。【工商银行】')

notify_fee = re.compile(u'您尾号(\d{4})卡(\d{1,2})日([\d:]+)(.+?)([\d.,]+)元,余额([\d.,]+)元。【工商银行】')

xls = xlwt.Workbook()

table = xls.add_sheet(u'账单')

table.write(0,3,'方式')

table.write(0,4,'用途')

table.write(0,5,'余额')

table.write(0,6,'备注')

def f(month,day,reason,fee,remain,line):

while(len(month) < 2):

month = '0' + month

while(len(day) < 2):

day = '0' + day

if '.' in fee:

fee = float(fee.replace(',',''))

else:

fee = int(fee.replace(',',''))

if '出' in reason:

fee = -fee

remain = float(remain.replace(',',''))

remain = round(remain,2)

table.write(line,1,month+day)

table.write(line,2,fee)

table.write(line,3,reason)

table.write(line,5,remain)

if __name__ == '__main__':

with open('bank.txt','r') as file:

current = 1

for line in file.readlines():

line = line.strip()

r1 = common.match(line)

r2 = notify_fee.match(line)

if r1:

f(r1.group(2),r1.group(3),r1.group(5),r1.group(6),r1.group(7),current)

current = current + 1

elif r2:

f('',r2.group(2),r2.group(4),r2.group(5),r2.group(6),current)

current = current + 1

else:

print('other #' + line.strip())

xls.save('result.xls')

欢迎留言共同改进程序~

python计算银行余额_Python:将银行扣费信息整理成账单相关推荐

  1. python采集银行信息_Python:将银行扣费信息整理成账单

    全文以工商银行的扣费信息为例 工行储蓄卡,绑定支付宝.微信后日常使用,偶尔会转入,日常收到的通知短信有支付.转入.信使展期扣费三类: 1. 您尾号1234卡1月2日20:57POS支出(快捷支付)10 ...

  2. python计算生态规模_Python计算生态的构建

    本专题的内容结构: 第一部分主要是:如何编写Python第三方库(包和模块) 第二部分主要是:如何编写带有c语言扩展的Python第三方库(包和模块) 第一部分的结构: unit1:深入理解Pytho ...

  3. python计算圆周率近似值_python计算圆周率pi的方法

    本文实例讲述了python计算圆周率pi的方法.分享给大家供大家参考.具体如下: from sys import stdout scale = 10000 maxarr = 2800 arrinit ...

  4. python计算excel平均值_python计算excel平均值和标准差

    ############################################## ######## python计算excel平均值和标准差 ####### ############### ...

  5. 怎样用python计算π的值_Python 计算 π 值的简单示例

    对python这个高级语言感兴趣的小伙伴,下面一起跟随编程之家 jb51.cc的小编两巴掌来看看吧! π是一个无数人追随的真正的神奇数字.我不是很清楚一个永远重复的无理数的迷人之处.在我看来,我乐于计 ...

  6. python计算化学浓度_python 计算化学

    信息举报 时间:2021-02-11 本页为您甄选多篇描写python 计算化学,python 计算化学精选,python 计算化学大全,有议论,叙事 ,想象等形式.文章字数有400字.600字.80 ...

  7. 用python计算两点坐标_python 计算方位角实例(根据两点的坐标计算)

    知道两点坐标,怎么计算两点方向的方位角? 答:首先计算坐标增量dx,dy(两个对应坐标分量相减,终点的减始点的). 若dx,dy中有一个为零时,根据另一个的正负决定方位角(0,90,180,270这四 ...

  8. python计算excel数据_python计算excel平均值和标准差

    ############################################## ######## python计算excel平均值和标准差 ####### ############### ...

  9. python计算银行余额_Python 小案例实战 —— 简易银行存取款查询系统

    Python 小案例实战 -- 简易银行存取款查询系统 涉及知识点 包的调用 字典.列表的混合运用 列表元素索引.追加 基本的循环与分支结构 源码 import sys import time ban ...

  10. python计算利率贷款_python 贷款利息计算公式

    固定支付贷款 固定支付贷款(fixed-payment loan) 也称为分期偿还贷款(fully amortized loan). 贷款人向借款人提供一定数量的资金,在约定的若干年度内,借款人每个期 ...

最新文章

  1. jenkins java传递变量,jenkins实现tag构建传入变量不生效的情况解决
  2. java怎么保存文件_java里数据怎么保存到硬盘或TXT文件里去
  3. 2、cookie session token详解
  4. ubuntu下交叉编译环境构建
  5. 2009年网页设计10大趋势
  6. java线程统一_Java线程结果不一致
  7. [AssertionError: nput tensor input format are different]
  8. PASCAL-VOC2012 数据集介绍 及 制作同格式数据
  9. 【现代机器人学】基于指数积的机械臂正运动学
  10. 如何优雅地进行错误处理(clean code阅读笔记之六)
  11. Java-密钥keytool及KeyStore的使用
  12. 浅谈5类过零检测电路
  13. 深入理解JNINativeInterface函数<一>
  14. error An unexpected error occurred: “https://registry.npmjs.org/ant-design-vue: tunneling socket cou
  15. @Zabbix配置邮箱告警及钉钉告警
  16. AI Gossip | 八卦人工智能的前世今生
  17. 输入波长显示颜色 matlab,新手求助:由光谱反射率计算颜色的三刺激值
  18. Yolov5部署训练及代码解读
  19. 软件测试之 购物车测试用例
  20. 光流文件(.flo),numpy,图像(.png)相互转换——完全python实现

热门文章

  1. [Zer0pts2020]ROR1
  2. php 同义词词库,php实现SEO伪原创同义词替换函数
  3. 计算机的显卡控制面板在哪里,nvidia控制面板在哪,详细教您如何进入英伟达控制面板...
  4. java前后端开发文档汇总
  5. 图解 Python 编程(27) | 时间和日期(附要点速查表·完结)
  6. 计算机建立excel文件,用Excel建立数据库 -电脑资料
  7. 《Redis设计与实现》学习笔记-单机数据库
  8. 经典面试题 之 JVM调优
  9. java图书管理系统个人总结_总结:JAVA小项目——图书管理系统
  10. 敏感词检测理论算法过程