'''
input:输入银行交易明细PDF
return:经营性收入总和(去除同名转账、关联人转账)
1.0:计算年经营收入
2.0:去除同名转账、关联人转账等
3.0:可视化封装:
输入
1、选择交易明细来源
2、输入同名及关联人等关键词
输出:
1、去除同名、关联人转账后的年收入
2、展示交易明细中的收入项及交易对手摘要
3、主要交易对手名称
'''
#!/usr/bin/env python
# coding: utf-8
# In[4]:
from tkinter import *
import tkinter as tk
import pdfplumber
import pandas as pd
import pandas as pd
import time
class Application():
def __init__(self,app=None):
self.app=app
self.application()
def application(self):
'''
功能一:创建输入界面,包含:标题0、贷款金额1、期限2和利率3
'''
#0交易明细分析工具
self.label0=Label(self.app,text='交易明细分析工具',font=('黑体',20),bg='white').grid(row=0,column=1)
#1输入框(文件名称)
self.v1=StringVar()
self.entry1=Entry(self.app,textvariable=self.v1,font=('黑体', 16),width=30,highlightbackground='red').grid(row=1,column=1,columnspan=2)
self.label1=Label(self.app,text='文件名称',font=('黑体', 16),bg='white',width=10).grid(row=1)
#2标签Label2
self.label2=Label(self.app,text='关键词',font=('黑体', 16),bg='white').grid(row=2,column=0)
#2输入框(需要去除的关键词)
self.v2=StringVar()
self.entry2=Entry(self.app,textvariable=self.v2,font=('黑体', 16),width=30).grid(row=2,column=1,columnspan=2)
self.unit2=Label(self.app,text='有多个关键词时,请使用英文逗号分隔。',font=('黑体', 12),bg='white',fg='red').grid(row=3,column=1)
#选择交易明细来源:0微信;1农行;2建行
self.var=IntVar()
self.ra0=Radiobutton(self.app,text='微信',variable=self.var,value=0,font=('黑体',16),bg='white')
self.ra0.grid(row=4,column=0)
self.ra1=Radiobutton(self.app,text='农行',variable=self.var,value=1,font=('黑体',16),bg='white')
self.ra1.grid(row=4,column=1)
self.ra2=Radiobutton(self.app,text='建行',variable=self.var,value=2,font=('黑体',16),bg='white')
self.ra2.grid(row=4,column=2)
def sum_income():
'''
房贷计算器
输入:I:年利率 N:年限 a:贷款总额
输出:总利息
'''
#1
if self.v1.get()=='':
self.erro1=Label(self.app,text='请输入文件名称',font=('黑体', 10),fg='red')
self.erro1.config(background='white')
self.erro1.grid(row=1,column=1)
self.app.after(3000,self.erro1.destroy)
'''
if self.v2.get()=='':
self.erro2=Label(self.app,text='请输入贷款期限',font=('黑体', 10),fg='red')
self.erro2.config(background='white')
self.erro2.grid(row=2,column=1)
self.app.after(3000,self.erro2.destroy)
elif not self.v2.get().isdigit():
self.erro2=Label(self.app,text='请输入数字',font=('黑体', 10),fg='red')
self.erro2.config(background='white')
self.erro2.grid(row=2,column=1)
self.app.after(3000,self.erro2.destroy)
if self.v3.get()=='':
self.erro3=Label(self.app,text='请输入年利率',font=('黑体', 10),fg='red')
self.erro3.config(background='white')
self.erro3.grid(row=3,column=1)
self.app.after(3000,self.erro3.destroy)
elif not_num(self.v3.get()):
print('lalala')
self.erro3=Label(self.app,text='请输入数字',font=('黑体', 10),fg='red')
self.erro3.config(background='white')
self.erro3.grid(row=3,column=1)
self.app
.after(3000,self.erro3.destroy)
'''
file_name=self.v1.get()
if self.v2.get()=='':
remove_list=False
else:
remove_list=list([self.v2.get()])
print(remove_list,type(remove_list))
if self.var.get()==1:#农行
#def core(file_name=self.file_name,remove_list=self.remove_list):
#2403211558299175598\2403141141106962516
with pdfplumber.open('%s.pdf'%file_name) as pdf:
s=0
s_remove=0
df_list=[]
for page in pdf.pages[:]:
ps=0
table=page.extract_text()
table=table.splitlines()
for num_i,i in enumerate(table) :
line_list=i.split()
for num_j,j in enumerate(line_list):
#判断该行是否包含“+”号
if '+' in j:
ps=ps+float(j[1:])
if remove_list !=False:
if line_list[num_j+2] not in remove_list:
s_remove=s_remove+float(j[1:])
#判断对手信息是否为纯数字,如果为纯数字,返回上一行内容
if line_list[num_j+2].isnumeric()==True:
df_list.append([j,table[num_i-1]])
else:
#如果不是纯数字则直接输出
df_list.append([j,line_list[num_j+2]])
#判断是否为同名转账
s=s+ps
data=pd.DataFrame(df_list,columns=['交易金额','交易对手'])
with pd.ExcelWriter("result.xlsx",mode='w') as writer:
data.to_excel(writer)
print('经营收入=',s)
print('去除同名转账后的经营收入=',s_remove)
elif self.var.get()==0:#微信
with pdfplumber.open('%s.pdf'%file_name) as pdf:
s=0
s_remove=0
df_list=[]
for page in pdf.pages[:]:
ps=0
table=page.extract_text()
table=table.splitlines()
for num_i,i in enumerate(table) :
line_list=i.split()
if '1.本《微信支付交易明细证明》仅证明:在用户选择的时间段内,用户通过微信支付账户发生的历史交易记录情况,包括零钱,零' in line_list[0]:
break
for num_j,j in enumerate(line_list):
#判断该行是否包含“收入”号
if '收入' in j:
ps=ps+float(line_list[num_j+2])
if remove_list !=False:
if line_list[num_j+3] not in remove_list:
s_remove=s_remove+float(line_list[num_j+2])
df_list.append([float(line_list[num_j+2]),line_list[num_j+3]])
s=s+ps
data=pd.DataFrame(df_list,columns=['交易金额','交易对手'])
with pd.ExcelWriter("result.xlsx",mode='w') as writer:
data.to_excel(writer)
print('经营收入=',s)
print('去除同名转账后的经营收入=',s_remove)
elif self.var.get()==2:
self.result0=Label(self.app,text='功能开发中,敬请期待。。。',font=('黑体', 20),bg='white')
self.result0.grid(row=7,column=1)
return 0
if remove_list==False:
self.result0=Label(self.app,text='经营收入='+str(round(s,2))+'元',font=('黑体', 20),bg='white')
self.result0.grid(row=7,column=1)
self.result1=Label(self.app,text=data.to_string(),font=('黑体', 6),bg='white')
self.result1.grid(row=9,column=1)
else:
self.result0=Label(self.app,text='经营收入='+str(round(s,2))+'元',font=('黑体', 20),bg='white')
self.result0.grid(row=7,column=1)
self.result2=Label(self.app,text='去除同名转账后的经营收入='+str(round(s_remove,2)),font=('黑体', 20),bg='white')
self.result2.grid(row=8,column=1)
self.result1=Label(self.app,text=data.to_string(),font=('黑体', 6),bg='white')
self.result1.grid(row=9,column=1)
#清除内容
def delete_content():
self.app.after(1,self.result0.destroy)
self.app.after(1,self.result1.destroy)
self.app.after(2,self.result2.destroy)
self.bt=Button(self.app,text='开始计算',command=sum_income,font=('黑体', 14),bg='white').grid(row=5,column=1,sticky=W)
self.bt=Button(self.app,text='清除内容',command=delete_content,font=('黑体', 14),fg='red',bg='white',activebackground='red').grid(row=5,column=1,sticky=E)
#以下为添加图表
if __name__=='__main__':
app=Tk()
app.title('交易明细分析工具')
app.config(bg="white")
App=Application(app)
app.geometry('600x600+300+150')#窗口大小设置
app.mainloop()
12-08
1211
![](https://csdnimg.cn/release/blogv2/dist/pc/img/readCountWhite.png)
03-14
639
![](https://csdnimg.cn/release/blogv2/dist/pc/img/readCountWhite.png)
“相关推荐”对你有帮助么?
-
非常没帮助
-
没帮助
-
一般
-
有帮助
-
非常有帮助
提交