python交易明细分析工具

'''
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()

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Little_Yuu

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值