简介
之前的文章中有提到使用Python将微信和支付宝账单导入到随手记。由于笔者平时购物主要使用京东,想要把京东的账单也给记录起来,所以向京东提了导出账单的需求。没想到这个功能很快就上线了。
导出账单
打开京东APP–》我的–》我的钱包–》我的账单–》点击右上角的四个小方块,导出账单。
账单转换
导出的账单是csv格式,但是前边21行是一些说明性的文字,咱们给它去掉。代码如下:
def remove_lines_range(file_name, start, end):
with open(file_name, 'r', encoding='utf-8') as file:
lines = file.readlines()
with open(file_name, 'w', encoding='utf-8') as file:
#print(lines[:max(start-1,0)])
#print(lines[end:])
file.writelines(lines[:max(start,1)-1] + lines[end:])
if __name__ == '__main__':
# 使用示例
file_name = 'test.csv'
start_line = 0 # 起始行(包含)
end_line = 21 # 结束行(包含)
remove_lines_range(file_name, start_line, end_line)
然后就是读取csv中的账单按照随手记的模板写入到xls文件中,参考代码如下:
from tkinter.messagebox import NO
import xlrd
import xlwt
from xlutils.copy import copy
from datetime import date, datetime
import chardet
import codecs
import csv
from common import remove_lines_range
# 打开随手记模板文件
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)
# 打开微信的账单文件
file_name = "jd1209"
csv_file_name = "jd1209.csv"
remove_lines_range(csv_file_name, 0, 21) #去掉前20行
with codecs.open('./{}'.format(csv_file_name), 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("to write:", new_row)
zhichu_sheet.write(r, head.index("交易类型"), "支出")
zhichu_sheet.write(r, head.index("日期"), new_row["交易时间"])
main_class = "其他杂项"
sub_class = "其他杂项"
# 京东的分类都比较杂,这里随便写写,导入后要手动分类
zhichu_sheet.write(r, head.index("分类"), main_class)
zhichu_sheet.write(r, head.index("子分类"), sub_class)
zhichu_sheet.write(r, head.index("账户1"), "京东白条")
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=r+1
write_book.save("{}.xls".format(file_name))
导入到随手记
导入到随手记的步骤请参考另一篇文章:使用Python将微信和支付宝账单导入随手记
总结
本文介绍了如何将京东的账单导入到随手记,目前代码实现比较粗糙。可能以后还会进一步完善。代码仓库:京东账单导入随手记的python代码