Python 办公小助手:读取 PDF 中表格并重命名
点击上方“Python爬虫与数据挖掘”,进行关注
回复“书籍”即可获赠Python从入门到进阶共10本电子书
今
日
鸡
汤
博观而约取,厚积而薄发。
日常工作中,我们或多或少都会接触到 Excel 表格、Word 文档和 PDF 文件。偶尔来个处理文件的任务,几个快捷键操作一下——搞定!但是,偏偏有些烦人的工作,操作繁琐且数据复杂,更要命的是耗时间,吭哧吭哧一下午却难出几个成果。
此时如果我们掌握些 Python 编程的技巧,整理下文件处理的流程通过编码来实现,不仅省时省力省心,还可以精进编码技术。今天我们就通过一个 PDF 处理的实例来演示下 Python 助力办公的过程。
上周朋友提了个 PDF 处理的问题,要求如下:
大致整理下,这问题和把大象装冰箱一样要分三步:
读取 PDF 中的表格内容
在表格内容中提取特定数据
以特定数据对文件重命名
此时面向 Python 默默许愿:要是 Python 中有现成的模块可以直接读取 PDF 中的表格就好了!
心愿达成!确实有个 tabula 模块可以直接解析 PDF 中的表格:
tabula-py is a simple Python wrapper of tabula-java, which can read table of PDF. You can read tables from PDF and convert into pandas's DataFrame. tabula-py also enables you to convert a PDF file into CSV/TSV/JSON file.
https://pypi.org/project/tabula-py/
如上所述, tabula-py 是 tabula-java 的一个封装模块,可以将 PDF 中的表格数据转化为 pandas 的 DataFrame 格式。
注意,安装 tabula-py 时命令是 pip install tabula-py,但导入时是 import tabula。
此外,该模块由于是对 tabula-java 的封装依赖 java,需要安装 java 才能正常调用。并且由最终转化得到的数据格式也可以看出,此模块也依赖 pandas 和 numpy,需要自行导入。
详细链接:https://pypi.org/project/tabula-py/
安装好 tabula-py,我们也准备一份 PDF 文件(demo.pdf)用于演示代码:
现在任务更清晰了:读取 demo.pdf 文件中的 “批号(款号)”数据:
"批号(款号)":"DRDY173131441HHDKD QWOEP23"
最终将这一串批号数据当作名字给 PDF 重命名,生成 DRDY...EP23.pdf 文件。
如果你能坚持看到这里,我准备向你推荐下 jupyter notebook。因为它可以按代码块执行,上下代码块之间变量可以共用,同时会直接显示代码块运行结果。拿它用来做代码及运行结果展示非常好用——下文记录的过程就是通过它运行代码截图所得。
1. 首先,导入 tabula,使用其函数读取 PDF 中的表格数据:
由所得结果大致可以看出,我们想要的批号数据是在第二列。
2. 之前提到读到的 PDF 表格数据是 DataFrame 格式,可以用 help 函数确认下:
3. 由表格数据中提取其每一列的名称:
4. 根据目测分析,批号位于第二列,所以提取第二列名字:
5. 通过 DataFrame["列名称"] 来定位到该列具体数据:
6. 通过 for 循环逐一打印此列数据,提取其中“批号”数据:
这里直接采用的是 "批号" in 字符串 的语法,倘若数据字符串中含有“批号”二字就会被筛选出,最终我们也如愿拿到了“批号数据”并赋值给 target 变量。
7. 拿到了“批号”数据,我们只选取字母数字拼接的数据串。接下来采用正则表达式,按照批号数据格式中只包含大写字母、数字以及中间会夹杂空格,制定匹配模式进行匹配提取:
最终我们拿到了批号数据串赋值给 result 变量。
8. 最终我们利用 os 模块将文件夹内的 “demo.pdf” 重命名为 result 所代表的批号数据串.pdf :
注意,这里的 f"{变量}字符串内容" 是格式化字符串的形式。
至此,我们完成了对单份 PDF 处理的完整流程。接下来我们可以多试几份不同 PDF 寻找共同的提取批号数据的规律,将其整理成连贯、简洁的最终版代码:
#!/usr/bin/env python
# encoding: utf-8
# @Time : 2019-10-24 21:39__author__ = 'Ted'import tabula
import re
import os# 将提取单一 PDF 文件内批号数据的过程定义成 get_target("pdf名称") 函数,最终函数将数据返回
def get_target(filename):df = tabula.read_pdf(filename)pattern = r'[A-Z0-9]+[\s]*[A-Z0-9]*'for item_sub in df[df.columns[1]]:if "批号" in str(item_sub):result = re.search(pattern,item_sub).group()return resultreturn Falseif __name__=="__main__":# 获取 PDF 所在文件夹folder = "test"# os 模块定位到该文件夹os.chdir(folder)# 获取文件夹内文件列表pdflist = os.listdir()# 打印该文件列表print(pdflist)# 对文件列表 for 循环处理for item in pdflist:# 如果该文件名称最后四位是 .pdf 或 .PDF,即我们要找的 PDF 文件if item[-4:] in [".pdf",".PDF"] :# 对该文件进行提取批号函数操作,将批号数据赋值给 new_namenew_name = get_target(item)# 如果不为空,即获取到了批号数据if new_name:# 对文件进行重命名操作os.rename(item,f"{new_name}.pdf")print("重命名成功!")
如果我们有大量 PDF 文件都要提取文件内的批号数据进行重命名,可以将其放到同一个文件夹中,然后只要在最终代码中修改 folder = "文件夹名称",运行代码等待几秒,便可微微一笑任务搞定了。
以上,感谢阅读~
------------------- End -------------------
往期精彩文章推荐:
Python环境搭建—安利Python小白的Python和Pycharm安装详细教程
一篇文章教会你理解Scrapy网络爬虫框架的工作原理和数据采集过程
利用Python网络爬虫抓取微信好友的签名及其可视化展示
欢迎大家点赞,留言,转发,转载,感谢大家的相伴与支持
想加入Python学习群请在后台回复【入群】
万水千山总是情,点个【在看】行不行
/今日留言主题/
随便说一两句吧~~
Python 办公小助手:读取 PDF 中表格并重命名相关推荐
- 通过Python的pdfplumber库提取pdf中表格数据
文章目录 前言 一.pdfplumber库是什么? 二.安装pdfplumber库 三.查看pdfplumber库版本 四.提取pdf中表格数据 1.引入库 2.定义pdf文件路径 3.打开pdf文件 ...
- Java 读取PDF中表格的工具
目录 1.方法1:Spire.PDF 1.1 Maven仓库下载导入 1.2 读取PDF中的表格 1.2.1 代码 1.2.2 表格内容 1.2.3 读取结果 2.方法2:Tabula 2.1 Mav ...
- python中读取word信息_Python实现批量读取word中表格信息的方法
本文实例讲述了Python实现批量读取word中表格信息的方法.分享给大家供大家参考.具体如下: 单位收集了很多word格式的调查表,领导需要收集表单里的信息,我就把所有调查表放一个文件里,写了个py ...
- python pdf 数据转excel 表格_python实现PDF中表格转化为Excel的方法
这几天想统计一下<中国人文社会科学期刊 AMI 综合评价报告(2018 年):A 刊评价报告>中的期刊,但是只找到了该报告的PDF版,对于表格的编辑不太方便,于是想到用Python将表格转 ...
- python 读取 word 表格_Python实现批量读取word中表格信息的方法
本文实例讲述了Python实现批量读取word中表格信息的方法.分享给大家供大家参考.具体如下: 单位收集了很多word格式的调查表,领导需要收集表单里的信息,我就把所有调查表放一个文件里,写了个py ...
- PDFPlumber使用入门+python实现PDF中表格转化为Excel的方法
PDFPlumber使用入门:https://blog.csdn.net/weixin_48629601/article/details/107224376 python实现PDF中表格转化为Exce ...
- java pdfbox读取pdf中的表格
java pdfbox读取pdf中的表格 目前遇到了需要解析pdf中表格的需求,遇到无法解析表格中的空格,求助大神帮助!!! <dependency><groupId>org. ...
- 通过Python的fitz库提取pdf中的图片
文章目录 前言 一.fitz库是什么? 二.安装fitz库 三.查看fitz库版本 四.pymupdf库是什么? 五.安装pymupdf库 六.查看pymupdf库版本 七.fitz和pymupdf是 ...
- java读取pdf_Java 读取PDF中的文本和图片的方法
本文将介绍通过Java程序来读取PDF文档中的文本和图片的方法.分别调用方法extractText()和extractImages()来读取. 使用工具:Free Spire.PDF for Java ...
最新文章
- 这次性能优化, QPS 翻倍了
- 7个实战案例、24个学习视频、12G干货资料...今天带你免费入门Python数据分析!...
- linux 编程博客,Linux系统编程博客参考
- VTK:图片之ImageAnisotropicDiffusion2D
- 玩linux笔记——持续更新
- java图像处理,彩色图像转灰度图的几种实现方式
- xfce4下面搜狗输入法默认按键设置
- 107. 二叉树的层序遍历 II and 102. 二叉树的层序遍历 023(BFS模板题打两道)
- centos查询是否有安装软件包
- ubuntu+vulkan
- SmartSVN for Mac(SVN客户端)
- 360浏览器小号多开使用
- 目标板(linux)与PC 网卡 直连(TFTP)
- linux制作 引导盘,制作Linux引导盘的四种方法
- matlab计算轮廓曲率半径,【转】求最小曲率半径matlab源程序
- 卐 4-3D图形的数学
- 删除word标题前方空格的方法
- 用wt文件恢复mongodb
- 新乡学院二批计算机类分数线,新乡学院录取分数线2021是多少分(附历年录取分数线)...
- akka 与kafka
热门文章
- python实现栅格计算器功能
- 简述7个流行的强化学习算法及代码实现!
- PHP 加密、解密工具Zend Guard和ionCube
- 数字图像中手写阿拉伯数字的识别技术概览
- 界面控件BCGControlBar for .NET v7.1正式发布——支持VS 2022
- 计算机 发声原理,耳机 篇十五:动铁耳机发声原理哦。喜欢记得收藏。
- 北大计算机硕士选调有发展吗,985毕业生不愿当公务员?别被忽悠了,看看北大毕业生的去向!...
- Seneca:NodeJS 微服务框架入门(一)
- 什么是一方库、二方库、三方库
- 一种能人类大脑信息解读成声音信息的人工智能