Python中比较好用的PDF模块——发票金额提取
参考文档:常用Python PDF库对比
上文中:列举了几个常用的Python中PDF的模块。
我自己的应用场景是将发票金额提取,并用金额去命名pdf文件名。
经过个人测试:PyMuPDF模块效果显著。
Talk is cheap,I show you the code。
import os
import fitz
import shutil
'''支持滴滴行程单。# PyMuPDF模块:https://pymupdf.readthedocs.io/en/latest/tutorial.html#extracting-text-and-images
'''
root_dir = "./"
out_dir = "./output"
if not os.path.exists(out_dir):os.mkdir(out_dir)def fapiao_read(text):if "¥" in text:print(text.split("¥")[-1].split("\n")[0])money = text.split("¥")[-1].split("\n")[0]elif "¥" in text:print(text.split("¥")[-1].split("\n")[0])money = text.split("¥")[-1].split("\n")[0]return moneydef xingchengdan_read(text):print(text.split("合计")[1].split("元")[0].split()[0])money = text.split("合计")[1].split("元")[0].split()[0]return moneyRepeat_name_list = []
for file in os.listdir("./"):if file.endswith(".pdf"):src = os.path.join(root_dir, file)doc = fitz.open(src) # or fitz.Document(filename)page = doc.load_page(0)text = page.get_text("text")if "¥" in text or "¥" in text:if "敏感信息脱敏" in text and "敏感信息脱敏" in text:money = fapiao_read(text)out_file_name = "电子发票" + money + "元"else:continueelse:money = xingchengdan_read(text)out_file_name = "电子发票" + money + "元行程单"Repeat_name_list.append(out_file_name)if out_file_name in Repeat_name_list:repeat_num = Repeat_name_list.count(out_file_name)if repeat_num == 1:out_file_name = out_file_nameelse:out_file_name = out_file_name + "(" + str(repeat_num-1) + ")"dst = os.path.join(out_dir, out_file_name+".pdf")shutil.copy(src, dst)
这个仅仅支持所有电子发票的pdf,同时支持滴滴发票和行程单的提取。其他pdf暂未考虑。因为我也用不到。
备注:据我观察人民币的“¥”符号,在发票中,有两种表现。代码中已经列出。
Python中比较好用的PDF模块——发票金额提取相关推荐
- Python中import导入上一级目录模块及循环import问题的解决
Python中import导入上一级目录模块及循环import问题的解决 参考文章: (1)Python中import导入上一级目录模块及循环import问题的解决 (2)https://www.cn ...
- Python中第三方的库(library)、模块(module),包(package)的安装方法以及ImportError: No module named...
Python中,想要安装第三方安装包,即third library,package等,对于熟悉的人来说,很简单. 但是对于新手,至少对于之前的我,很难,往往只是安装一个很小的包,都被搞得一头雾水. 现 ...
- python中使用sys模板和logging模块获取行号和函数名的方法
From: http://www.jb51.net/article/49026.htm 这篇文章主要介绍了python中使用sys模板和logging模块获取行号和函数名的方法,需要的朋友可以参考下 ...
- python中 time、datetime、random模块
1. 自定义模块 1.1 模块分类 模块的分类: 1.内置模块(标准库)--python解释器自带的.py文件(模块): 2.第三方模块-- 需要额外下载的 (pypi) 3.自定义模块(程序员写的) ...
- Python实训day10am【Python中的地址引用、os模块】
Python实训-15天-博客汇总表 目录 1.Python中的地址引用 2.os模块(操作系统模块) 2.1.os案例1 2.2.os案例2 2.3.os案例3 2.4.os案例4 2.5.os案例 ...
- MongoDB数据库(8.Python中使用mongodb数据库以及pymongo模块用法)
在Python中使用MongoDB数据库,首先要下载pymongo模块 直接在命令行 pip install pymongo 就可以了 Python中使用pymongo模块对MongoDB数据 ...
- Python中的堆实现:heapq 模块——利用堆结构实现快速访问数据流中的中位数
堆结构 堆结构是一种优先队列,可以以任意顺序添加对象,并随时查找或删除最小(大)的元素,或者查找和删除前 K 个最小(大)元素.相比于列表方法min() / max(),这样做的效率要高得多. 堆结构 ...
- python用方括号提取字符中的数值_Python使用re模块正则提取字符串中括号内的内容示例...
Python使用re模块正则提取字符串中括号内的内容示例 本文实例讲述了Python使用re模块正则提取字符串中括号内的内容操作.分享给大家供大家参考,具体如下: 直接上代码吧: # -*- codi ...
- python中options类_Python的OptionParser模块
Python中强大的选项处理模块. 示例 #!/usr/bin/pythonfrom optparse import OptionParser parser = OptionParser() pars ...
最新文章
- Arduino 各种模块篇 步进电机 step motor( 不用库,不用shield, 纯)
- CentOS下安装网卡驱动
- PS教程第十一课:会打开 会关闭我回了
- 四、Dynamic-programming algorithm Dynamic--LCS
- 在大公司天天调参数,感觉快废了~
- 【C++ STL学习之七】STL算法之find和find_if
- python输入多个数字 找出只出现一个的数字_在python数组中找到接近给定数字的多个值...
- java 验证码的制作
- 【LeetCode】【数组】题号:*453,数组元素相等的最小操作次数
- EasyPay移动支付框架
- ubuntu18.04使用网易云音乐 ubuntu网易云音乐打不开怎么办? ubuntu安装网易云音乐
- pcntl php windows_PHP各版本安装pcntl扩展
- Found my pics from 2007
- 小白必备!Rust 编程语言入门教程
- 基于互联网+居民健康管理平台技术方案
- 用python处理水仙花数
- RandLA-Net复现S3DIS记录
- java麻将软件_dnf徽章加什么
- 寄居蟹与海葵c语言大作业,寄居蟹如何与海葵共生
- 【AI视野·今日NLP 自然语言处理论文速览 第二十三期】Tue, 28 Sep 2021
热门文章
- 太全了!!138 张图带你 MySQL 入门!!
- the connected emulator is a j-link clone
- Letax 空格、字号、括号、序号
- 中华人民共和国户口登记条例
- 5.21 制作一个简易的购物车效果 JS的这些Dom基础内容快来学习吧
- 给定一个非负整数num,范围中的每个数字i 计算其二进制中1的个数
- 落单的数(Java)
- 模拟电路设计的九个级别 (ZT)!!!
- IntArray和Array<Int>
- Android API 指南 - Android API Guides