使用Python将微信和支付宝账单导入随手记

news/2024/5/4 22:26:22/文章来源:https://blog.csdn.net/luchengtao11/article/details/127340578

简介

本文介绍如何使用Python将微信和支付宝账单转换为可以导入随手记的文件,实现微信和支付宝账单的批量导入。

需求:

1、需要将支付宝和微信上的支出账单自动或半自动地导入到随手记中

已知信息:

1、支付宝和微信的app端都可以导出csv格式的账单

2、随手记web版支持导入账单

  •         虽然官方提供了支付宝账单和财付通账单的导入方法,但是有人试过实际上不太行。看了一眼不符合笔者的需求:我是想导入所有的支出(不管是支付宝余额支出还是通过支付宝的银行卡支出),而支付宝官网导出的账单好像只有支付宝本身余额相关的账单(具体没细看)
  • 随手记提供了导入模板,只要按照模板填写数据就可以快速导入

 

3、其他需要注意的信息

  • 新版的随手记的账本分为随手记原生账本和神象云账本。两种账本的导入地址是不一样的。
    • 随手记:随手记——记账就要随手记!随手记免费为您提供:网上账本,预算控制,在线理财,网上记账,账单同步等服务
    • 神像云:随手记企业版——360行,行行随手记

解决思路 

将微信和支付宝导出的csv文件,用代码读出来并写入随手记的模板文件中,再将文件导入到随手记。

代码实现:

注意点:

  • app上导出的csv文件除了账单外还有一些说明问题,需要把这些说明文字删掉
  • 随手记上下载下载的模板文件里面也有一些示例记录,这些也应该删掉

代码比较简单。注意下我这里是只关注了支出的账单,如果你需要关注其他类型的账单可以自己修改代码。见下:

支付宝账单处理:

from tkinter.messagebox import NO
import xlrd
import xlwt
from xlutils.copy import copy
from datetime import date, datetimeimport codecs
import csv# 打开随手记模板文件
read_book = xlrd.open_workbook(r"./template.xls", formatting_info=False)# 获取所有的sheet
print("所有的工作表:", read_book.sheet_names())
r_zhichu_sheet = read_book.sheet_names()[0]# 根据sheet索引或者名称获取sheet内容
r_zhichu_sheet = read_book.sheet_by_index(0)# sheet1的名称、行数、列数
print("工作表名称:%s,行数:%d,列数:%d" %(r_zhichu_sheet.name, r_zhichu_sheet.nrows, r_zhichu_sheet.ncols))
head: list = r_zhichu_sheet.row_values(0)  # 获取第一行的表头内容
print(head)
index = head.index('交易类型')  # 获取交易类型列所在的列数# 拷贝一份用于写
write_book = copy(read_book)
zhichu_sheet = write_book.get_sheet(0)
assert (zhichu_sheet.get_name(), "支出")# 支付宝的账单分类与随手记账单分类的映射
# 可以根据你的账本自定义
type_dict = {"交通出行": ("行车交通", "公共交通"),"餐饮美食": ("食品酒水", "早午晚餐"),"其他": ("其他杂项", "其他支出"),"亲友代付": ("其他杂项", "亲友代付"),"食品酒水": ("食品酒水", "早午晚餐"),"充值缴费": ("交流通讯", "手机费"),"日用百货": ("购物消费", "家居日用"),"服饰装扮": ("购物消费", "衣裤鞋帽"),"文化休闲": ("休闲娱乐", "电影"),"住房物业": ("居家生活", "物管费"),"生活服务": ("食品酒水", "早午晚餐"),"医疗健康": ("医疗教育", "药品费"),}def get_type(alipy_type):ssj_type = type_dict.get(alipy_type)if ssj_type == None:  # 否则返回默认的ssj_type = (alipy_type, "")return ssj_type# 打开支付宝的账单文件
with codecs.open('./alipay.csv') as f:r = 1  # 行数for row in csv.DictReader(f, skipinitialspace=True):# print(row)# 原始row中有很多空格,给去除一下new_row = {}for k in row:new_row[k.strip()] = row[k].strip()print("write:", new_row)zhichu_sheet.write(r, head.index("交易类型"), "支出")zhichu_sheet.write(r, head.index("日期"), new_row["交易时间"])ssj_type = get_type(new_row["交易分类"])zhichu_sheet.write(r, head.index("分类"), ssj_type[0])zhichu_sheet.write(r, head.index("子分类"), ssj_type[1])zhichu_sheet.write(r, head.index("账户1"), "支付宝")# zhichu_sheet.write(r,head.index("账户2"),"支出")zhichu_sheet.write(r, head.index("金额"), new_row["金额"])zhichu_sheet.write(r, head.index("商家"), new_row["交易对方"])zhichu_sheet.write(r, head.index("备注"), new_row["商品说明"])r += 1
write_book.save("output.xls")

微信账单处理:

from tkinter.messagebox import NO
import xlrd
import xlwt
from xlutils.copy import copy
from datetime import date, datetimeimport codecs
import csv# 打开随手记模板文件
read_book = xlrd.open_workbook(r"./template.xls", formatting_info=False)# 获取所有的sheet
print("所有的工作表:", read_book.sheet_names())
r_zhichu_sheet = read_book.sheet_names()[0]# 根据sheet索引或者名称获取sheet内容
r_zhichu_sheet = read_book.sheet_by_index(0)# sheet1的名称、行数、列数
print("工作表名称:%s,行数:%d,列数:%d" %(r_zhichu_sheet.name, r_zhichu_sheet.nrows, r_zhichu_sheet.ncols))
head: list = r_zhichu_sheet.row_values(0)  # 获取第一行的表头内容
print(head)
index = head.index('交易类型')  # 获取交易类型列所在的列数# 拷贝一份用于写
write_book = copy(read_book)
zhichu_sheet = write_book.get_sheet(0)
assert (zhichu_sheet.get_name(), "支出")# 打开微信的账单文件
with codecs.open('./wechat.csv',encoding="utf-8") as f:r = 1  # 行数for row in csv.DictReader(f, skipinitialspace=True):# print(row)# 原始row中有很多空格,给去除一下new_row = {}for k in row:new_row[k.strip()] = row[k].strip()print("write:", new_row)# 只记支出if new_row["收/支"] == "收入":continue# 退款的不用记if new_row["当前状态"] == "已全额退款":continue# 转账不记if new_row["交易类型"] == "转账":continuezhichu_sheet.write(r, head.index("交易类型"), "支出")zhichu_sheet.write(r, head.index("日期"), new_row["交易时间"])# 微信的分类都比较杂,这里随便写写,导入后要手动分类zhichu_sheet.write(r, head.index("分类"), "其他杂项")zhichu_sheet.write(r, head.index("子分类"), "其他支出")zhichu_sheet.write(r, head.index("账户1"), "微信钱包")# zhichu_sheet.write(r,head.index("账户2"),"支出")zhichu_sheet.write(r, head.index("金额"), new_row["金额(元)"][1:])zhichu_sheet.write(r, head.index("商家"), new_row["交易对方"])zhichu_sheet.write(r, head.index("备注"), new_row["商品"])r += 1
write_book.save("wechat_output.xls")

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_23999.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

引导过程与服务控制

目录: 1、引导过程总览 2、备份与恢复第一块硬盘前512字节 3、修复GRUB引导故障 4、忘记密码 5、开关系统服务控制Linux操作系统引导过程引导过程总览: 开机自检→MBR引导→GRUB菜单→加载内核→init进程初始化 1、bios 检查硬件设置grub功能和组成 bootloader:引导加载器,…

npm install ,npm ERR code 401 Incorrect or missing password 错误原因与.npmrc 配置文件的使用

前言:前端去维护项目时,通过 git clone 下来以后,经常是直接 npm install 去安装项目需要的 node_modules ,但是往往很多项目不是我们自己写的,或者从 GitHub 上面 clone 的开源项目,这个时候出现问题就很难…

【ASM】字节码操作 转换已有的类 ClassReader 删除方法 添加方法

文章目录 1.概述2.案例2.1 删除方法2.2 添加方法2.3小总结3.总结1.概述 上一篇文章:【ASM】字节码操作 转换已有的类 ClassReader 修改字段信息 删除字段 增加字段 在上一篇文章中我们学到了如何添加字段与删除字段。 本章节我们来尝试修改方法和删除方法。 2.案例 2.1 删…

搜索查找类

查找搜索类\color{blue}{\huge{查找搜索类}}查找搜索类 find find指令从指定目录向下递归地便利各个子目录,如果在/root目录下进行寻找,根据文件目录的树状结构,就是进行全盘查找,非常浪费时间,所以使用find 进行寻找…

MATLAB | 绘图复刻(二) | 折线图+误差棒+柱状图+散点抖动+灰色背景+图片叠加

看到gzh R语言ggplot2科研绘图发布了一篇绘图复刻类文章,复刻了: Nature(IF49.962)文章(Gut microbiota modulates weight gain in mice after discontinued smoke exposure)其中的Figure.1b,绘制效果十分惊艳,手痒就想拿MATLAB也…

RocketMQ 消费者Rebalance算法 解析——图解、源码级解析

🍊 Java学习:Java从入门到精通总结 🍊 深入浅出RocketMQ设计思想:深入浅出RocketMQ设计思想 🍊 绝对不一样的职场干货:大厂最佳实践经验指南 📆 最近更新:2022年10月15日 &#…

(附源码)计算机毕业设计大学生网上书店

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

(附源码)计算机毕业设计电脑外设销售系统小程序

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

操作系统基本功能(操作系统)

目录 一、处理机管理 二、存储器管理 三、设备管理 四、文件管理 五、作业管理 一、处理机管理 中央处理机(CPU)是计算机系统中一个举足轻重的资源。用户程序进入内存后,只有获得CPU,才能真正得以运行。 为了提高CPU的利用率…

前端都应该了解的 NodeJs 知识及原理浅析

node.js 初探 Node.js 是一个 JS 的服务端运行环境,简单的来说,它是在 JS 语言规范的基础上,封装了一些服务端的运行时对象,让我们能够简单实现非常多的业务功能。 如果我们只使用 JS 的话,实际上只是能进行一些简单…

docker mysql8使用SSL及使用openssl生成自定义证书

《docker安装MySQL8》 修改my.cnf vi /docker_data/mysql/conf/my.cnf[client] default-character-setutf8mb4 [mysql] default-character-setutf8mb4 [mysqld] character-set-serverutf8mb4 default_authentication_pluginmysql_native_password #增加ssl ssl保存&#xff0…

【让你从0到1学会c语言】文件操作

作者:喜欢猫咪的的程序员 专栏:《C语言》 喜欢的话:世间因为少年的挺身而出,而更加瑰丽。 ——《人民日报》 目录 什么是文件: 我们为什么要使用文件呢? 文件分类&#x…

rbf神经网络和bp神经网络,rbf神经网络百度百科

1、rbf神经网络算法是什么? RBF神经网络算法是由三层结构组成,输入层至隐层为非线性的空间变换,一般选用径向基函数的高斯函数进行运算;从隐层至输出层为线性空间变换,即矩阵与矩阵之间的变换。 RBF神经网络进行数据运算时需要…

基于springboot的旅游打卡攻略分享小程序

💖💖作者:IT跃迁谷毕设展 💙💙个人简介:曾长期从事计算机专业培训教学,本人也热爱上课教学,语言擅长Java、微信小程序、Python、Golang、安卓Android等。平常会做一些项目定制化开发…

预处理的补充知识

🏖️作者:malloc不出对象 ⛺专栏:《初识C语言》 👦个人简介:一名双非本科院校大二在读的科班编程菜鸟,努力编程只为赶上各位大佬的步伐🙈🙈 目录一、宏的补充知识1.1 宏定义充当注释…

MABSA(Multimodal Aspect-Based Sentiment Analysis)2022ACL 预训练

大致浏览,没有细看。 论文题目(Title): Vision-Language Pre-Training for Multimodal Aspect-Based Sentiment Analysis 研究问题(Question):多模态情感分析 MABSA (Multimodal Aspectased S…

黑马程序员Java零基础视频教程(2022最新Java)B站视频学习笔记-Day14-面向对象进阶02

1、权限修饰符和代码块 1.1 权限修饰符 权限修饰符:是用来控制一个成员能够被访问的范围的。 可以修饰:成员变量、方法、构造方法、内部类。 巧计举例: private--------私有的----------相当于私房钱,只能自己用 默认--------…

LVS+KeepAlived高可用负载均衡集群

内容预知 1. 高可用群集的相关知识 1. 1 高可用(HA)群集与普通群集的比较 普通群集 高可用群集(HA) 1.2 KeepAlive 高可用方案 1.3 KeepAlived的体系模块 1.4 Keepalived实现原理 2. 高可用群集的脑裂现象及预防措施 2.1 高可用集群的脑裂现象及其…

树莓派学习笔记

记录一下树莓派的使用,包含操作系统、linux命令、python、硬件等知识。参考《树莓派开发实战》树莓派简介及型号 树莓派(Raspberry Pi)是一款基于 Linux 系统的、只有一张信用卡大小的卡片式计算机,树莓派已经成为基于 Linux 的低成本电脑和嵌入式计算机平台这个领域中的重…

Material UI – React (2022) 版的完整教程

Material UI – React (2022) 版的完整教程 这是关于 Material UI 的最期待的课程。该课程涵盖了 Material UI 的所有组件 课程英文名:Material UI - The Complete Guide With React (2022) Editio 此视频教程共5.5小时,中英双语字幕,画质…