1 简介

  • 最近想整理一下账单,发现微信每次只能导出3个月的账单。。。支付宝导出的时间更长一点。
  • 为了把这些账单整合,我写了一个python的程序。
  • 使用本程序之前,不要修改导出的账单的文件名!
  • 码云
    • 我把程序打包好了,可以在码云的dist文件夹下找到

2 思路

  • 第一步:选择账单文件(官方导出的csv文件),程序会循环调用文件对话框,每次只能选择一个文件,直到没有选择文件为止。
  • 第二步:如果第一步中有选择文件,则弹出保存文件对话框,选择保存的位置。如果没有,则程序直接结束
  • 第三步:处理每一个csv文件,一行一行地读取,将数据行按照逗号分隔开,然后取自己需要的内容即可。
  • 第四步:在windows系统下,写一个bat批处理文件,方便运行python文件。
    py文件内容如下
import os
import win32ui  # 需要单独安装:pip install pypiwin32
import sys
from pathlib import Path'''
导出的标题包括:
["交易时间", "商品名称", "交易金额","收/支" ,"交易对方","交易类型", "备注"]
'''
# 文件标识
weChatFileSign = "微信"
aliPayFileSign = "alipay"
# 文件的字符集
weChatFileCharset = "UTF-8"
aliPayFileCharset = "GBK"
# 标题的位置
weChatTitleRow = 17
aliPayTitleRow = 5
# 标题的映射关系
titles = ["交易时间", "商品名称", "交易金额", "收/支", "交易对方", "交易类型", "备注", "来源"]
weChatTitleRelation = [0, 3, 5, 4, 2, 1, 10]
aliPayTitleRelation = [2, 8, 9, 10, 7, 6, 14]
weChatTitleLen = 11
aliPayTitleLen = 16
titleLen = len(titles)
# 支付宝交易状态的列
aliPayStatusCol = 11
aliPayStatusFaild = "交易失败"  # 交易失败的字样,不要该行# 文件选择的位置
choosePath = os.path.dirname(sys.argv[0])# 返回选择的多个csv文件
def getCsvFilenames():filenames = []lpszFilter = "csv Files (*.csv,*.txt)|*.csv;*.txt|" \"Files (*.*)|*.*|| "global choosePathwhile True:# 当前文件夹路径dlg = win32ui.CreateFileDialog(True, "csv", None, 0x04 | 0x02, lpszFilter)  # 1表示打开文件对话框# 设置打开文件对话框中的初始显示目录dlg.SetOFNInitialDir(choosePath)dlg.DoModal()# 等待获取用户选择的文件filename = dlg.GetPathName()  # 获取选择的文件名称if filename == "":breakprint(filename)filenames.append(filename)choosePath = os.path.dirname(filename)return filenames# 获取保存的位置
def getSaveFilepath():dlg = win32ui.CreateFileDialog(False, "csv", None, 0x04 | 0x02, "csv Files (*.csv)|*.csv||")# 设置打开文件对话框中的初始显示目录dlg.SetOFNInitialDir(choosePath)dlg.DoModal()# 等待获取用户选择的文件return dlg.GetPathName()  # 获取选择的文件名称# 处理微信付款记录
def resolveWeChat(filename, saveFile):out = open(saveFile, "a", encoding="GBK", errors='ignore')# 写入文件curLine = 0with open(filename, 'r', encoding=weChatFileCharset, errors="ignore") as r:for line in r.readlines():curLine = curLine + 1if curLine < (weChatTitleRow + 1):continueelse:# 其他行cols = line.split(",")if len(cols) < weChatTitleLen:continuewriteLineArr = []for i in range(titleLen - 1):index = weChatTitleRelation[i]writeLineArr.append(cols[index].strip())writeLineArr.append("微信支付\n")writeLine = ",".join(writeLineArr)out.writelines(writeLine)out.close()# 处理支付宝付款记录
def resolveAliPay(filename, saveFile):out = open(saveFile, "a", encoding="GBK", errors='ignore')# 写入文件curLine = 0with open(filename, 'r', encoding=aliPayFileCharset) as r:for line in r.readlines():curLine = curLine + 1# 处理每一行if curLine < (aliPayTitleRow + 1):continueelse:# 其他行cols = line.split(",")if len(cols) < aliPayTitleLen:continuewriteLineArr = []if cols[aliPayStatusCol] == aliPayStatusFaild:# 抛去交易失败的continuefor i in range(titleLen - 1):index = aliPayTitleRelation[i]writeLineArr.append(cols[index].strip())writeLineArr.append("支付宝支付\n")writeLine = ",".join(writeLineArr)out.writelines(writeLine)out.close()# 处理文件
def resolveFile(filenamePath, saveFile):filename = os.path.basename(filenamePath)flag = filename.find(weChatFileSign)print("正在处理>>" + filename)if flag >= 0:resolveWeChat(filenamePath, saveFile)returnflag = filename.find(aliPayFileSign)if flag >= 0:resolveAliPay(filenamePath, saveFile)else:print("文件格式不正确!")filenames = getCsvFilenames()
if len(filenames) > 0:print("开始处理文件")saveFilePath = getSaveFilepath()if saveFilePath != "":# 看看文件是否存在saveFileTemp = Path(saveFilePath)if not saveFileTemp.exists():# 如果文件不存在则创建,并添加标题行save = open(saveFilePath, "a", encoding="GBK", errors='ignore')temp = ",".join(titles) + "\n"save.writelines(temp)save.close()for filenamePath in filenames:fileTemp = Path(filenamePath)if fileTemp.exists():resolveFile(filenamePath, saveFilePath)
# 如果没选择文件则filenamePath是空的
print("处理完毕")
os.system("pause")
  • 批处理文件内容如下
python 微信_支付宝支付记录整合.py
pause
  • 将批处理文件的快捷方式放到桌面即可方便调用。

支付宝和微信的支付记录整合相关推荐

  1. uniapp中唤醒支付宝,微信进行支付并返回app

    支付分为前端发起支付,和后端发起支付两种方式 1.在前端发起支付,uniapp给我们提供好了,可以使用的api接口. uni.requestPayment({provider: 'alipay',or ...

  2. 支付宝,微信免签支付,不接第三方平台

    支付宝,微信免签支付, 1.不需要企业资质,不需网站认证. 2.个人账户即可收款,无需成为支付宝.微信商家, 3.无需对接第三方平台, 4.无需任何手续费,无需提现,即时收款到支付宝.微信账户, 5. ...

  3. java支付宝和微信app支付(服务端处理)

    最近在接入支付宝和微信的app支付 , 之前因为大部分做的都是网页版的支付,没接触过app,这次把遇到的坑都记录下来. 首先 支付宝支付 https://openhome.alipay.com/pla ...

  4. JAVA微信APP支付接口整合

    2019独角兽企业重金招聘Python工程师标准>>> 上次我们看到了支付宝的APP支付工具,那么这次就来封装封装微信的APP支付;如果已经清楚了支付宝的支付流程,那么微信支付也和它 ...

  5. 支付宝和微信的支付流程图

    支付宝支付流程: 微信的支付流程:

  6. php 支付宝和微信pc支付

    支付宝pc支付 文档:电脑网站支付产品介绍 | 网页&移动应用 1,创建网页&移动应用 创建应用 2,获得网站支付能力 支付宝开放平台 3,sdk composer intall al ...

  7. java app微信支付接口_JAVA微信APP支付接口整合

    上次我们看到了支付宝的APP支付工具,那么这次就来封装封装微信的APP支付;如果已经清楚了支付宝的支付流程,那么微信支付也和它大同小异了,当然这其中肯定是有各种变化的: 首先让我把微信支付文档的官网贴 ...

  8. [Swift]WKWebView拉起支付宝和微信APP支付

    先在项目中导入AlipaySDK和WechatOpenSDK. 再对info.plist中LSApplicationQueriesSchemes添加alipay.weixin. 最后到代理方法中完成拦 ...

  9. php支付宝第三方授权,thinkphp支付宝,微信第三方支付(PC版)

    支付宝支付 1:首先去支付宝的官网下载第三方sdk,如下图放在vendor下面 目录结构 然后在公共方法里面封装一个pay.class.php的方法,来处理第三方支付 贴上源码 //支付宝 publi ...

最新文章

  1. css图片和文字一样高,css里图片和文字如何等高
  2. 【MATLAB】二维绘图 ( 绘制二维图像 | 设置图像样式 )
  3. 【Linux】一步一步学Linux——w命令(227)
  4. 机器学习】LDA线性判别分析
  5. win10 make命令的安装
  6. java基础—Date类的常见方法演示
  7. android 1到100000 正则,day13 Java学习(常见对象正则表达式)
  8. 三款200万像素照相手机测评
  9. 魅族回应 “暗中给手机植入木马”;前谷歌AI伦理专家遭解雇或因论文;GoLand 2020.3发布|极客头条...
  10. 我敢打赌,你对ConcurrentHashMap不了解?
  11. android 按键上报流程,input子系统详解,按键如何上报
  12. python订餐系统简单版
  13. C# winform程序调用屏幕键盘
  14. pc登录2个微信客户端
  15. 电脑连接手机热点时,电脑能够搜到但是却连接不上的问题
  16. 怎么将模糊的照片变清晰
  17. python金融数据分析及可视化
  18. 网关系统就该这么设计(万能通用),贼稳!
  19. Nginx转发https访问的实现
  20. 2022-2027年中国倒车雷达行业市场全景评估及发展战略规划报告

热门文章

  1. C# DataRow 比较
  2. Unity3d射线穿透攻击
  3. 各类软件开发文档的英文缩写
  4. Hyper-v虚拟机怎么连接U盘教学
  5. 更改计算机管理员用户名和密码忘记了怎么办,忘记电脑管理员Administrator密码?使用新建账户能否恢复密码?...
  6. Linux配置多个IP地址
  7. 用5行代码构建自定义训练的对象检测模型
  8. amlogic小米_小米全面屏电视Pro搭载与Amlogic联合研发的12nm制程芯片
  9. 牛客网数据库SQL 实战答案解析
  10. Halo 开源项目学习(四):发布文章与页面