小言_互联网的博客

利用pdfplumber处理滴滴电子发票

395人阅读  评论(0)
  • 利用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
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场