- 利用Python中的pdfplumber模块,读取滴滴打车的行程单信息,对行程单和发票进行重命名。
- 处理后的文件,非常便于检索、查找、归类和报销填报。
每次滴滴打车,回来以后发票处理都挺麻烦。特别是出长差回来,有时候几十张发票,每一张都要与行程单对在一起,打印出来交给财务。
而滴滴的电子发票从邮箱里面下载下来以后,只看文件名是不知道里面的信息的。
比如从邮箱里面下载了一堆这样的文件
还好Python有强大的pdf处理工具,简单搜索一下,决定使用pdfplumber这个插件库。
1、 导入模块
import pdfplumber
import os
import shutil
# 要用到pdfplumber
# os主要用于获取pdf的文件名
# shutil主要用于copy原pdf文件,到新的文件名
2、获取报销单列表
# 首先获取所有文件名
file_list = os.listdir()
# 建立一个空的“报销单”文件名list
bxd_filename_list = []
# 给出报销单和发票的固定前缀(从邮箱里面下载的样子)
pre_bxd = '滴滴出行行程报销单'
pre_fp = '滴滴电子发票'
# 获得所有的报销单列表
for fname in file_list:
if '.pdf' in fname and pre_bxd in fname:
bxd_filename_list.append(fname)
以上就获得了所有的报销单文件名。因为报销单文件名和发票文件名除了基本名称以外,其他都是一样的。这需要邮件下载的时候稍微注意一下。
3、 读取信息,重命名文件
下面读取报销单里面的信息,包括日期 + 城市 + 出发地点
# 遍历报销单列表
for bxd_filename in bxd_filename_list:
# 获得报销单的后缀部分,即'滴滴出行行程报销单'之后的所有编号、扩展名等
# 这样不管原来的文件名后面是什么样子的,
# 只要编号一样的报销单和发票就有了相同的名字。
ex_name = bxd_filename[len(pre_bxd):]
with pdfplumber.open(bxd_filename) as pdf:
# 获得文件的第一页
page = pdf.pages[0]
# 获得表单
table = page.extract_tables()
# 获得日期 + 城市 + 出发地点
f_rename = table[0][1][2].split(' ')[0]+' '+table[0][1][3]+' '+table[0][1][4]
# 根据获得的日期、出发点,重命名文件
shutil.copyfile(bxd_filename, f_rename+pre_bxd+'.pdf')
fp_filename = pre_fp + ex_name
shutil.copyfile(fp_filename, f_rename+pre_fp+'.pdf')
4、 最终效果
这样一来便获得了整齐的重命名以后的发票和报销单文件名。
最大的好处,是在电脑中可以存放大量的电子发票,直接用everything检索、以后填写报销非常方便。一眼就知道哪些报销了,哪些还没有填报。
效果如下
5、 全部代码
全部的代码如下:
import pdfplumber
import os
import shutil
file_list = os.listdir()
bxd_filename_list = []
pre_bxd = '滴滴出行行程报销单'
pre_fp = '滴滴电子发票'
# 获得所有的报销单列表
for fname in file_list:
if '.pdf' in fname and pre_bxd in fname:
bxd_filename_list.append(fname)
# 遍历报销单列表
for bxd_filename in bxd_filename_list:
# 获得报销单的后缀部分,即'滴滴出行行程报销单'之后的所有编号、扩展名等
ex_name = bxd_filename[len(pre_bxd):]
with pdfplumber.open(bxd_filename) as pdf:
# 获得文件的第一页
page = pdf.pages[0]
# 获得表单
table = page.extract_tables()
# 获得日期 + 出发地点
f_rename = table[0][1][2].split(' ')[0]+' '+table[0][1][3]+' '+table[0][1][4]
# 根据获得的日期、出发点,重命名文件
shutil.copyfile(bxd_filename, f_rename+pre_bxd+'.pdf')
fp_filename = pre_fp + ex_name
shutil.copyfile(fp_filename, f_rename+pre_fp+'.pdf')
转载:https://blog.csdn.net/Flamsky/article/details/102329544
查看评论