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

简介

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

需求:

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

已知信息:

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

使用Python将微信和支付宝账单导入随手记_第1张图片使用Python将微信和支付宝账单导入随手记_第2张图片

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

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

使用Python将微信和支付宝账单导入随手记_第3张图片

 

3、其他需要注意的信息

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

解决思路 

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

使用Python将微信和支付宝账单导入随手记_第4张图片

代码实现:

注意点:

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

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

支付宝账单处理:

from tkinter.messagebox import NO
import xlrd
import xlwt
from xlutils.copy import copy
from datetime import date, datetime

import 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, datetime

import 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["交易类型"] == "转账":
            continue

        zhichu_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")

你可能感兴趣的:(python,微信,账单处理,python,excel)