'''
input:输入银行交易明细PDF
return:经营性收入总和(去除同名转账、关联人转账)
1.0:计算年经营收入
2.0:去除同名转账、关联人转账等
3.0:可视化封装:
输入
1、选择交易明细来源
2、输入同名及关联人等关键词
输出:
1、去除同名、关联人转账后的年收入
2、展示交易明细中的收入项及交易对手摘要
3、主要交易对手名称
'''
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
'''
self.label0=Label(self.app,text='交易明细分析工具',font=('黑体',20),bg='white').grid(row=0,column=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)
self.label2=Label(self.app,text='关键词',font=('黑体', 16),bg='white').grid(row=2,column=0)
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)
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:贷款总额
输出:总利息
'''
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:
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()