点击上方“Python爬虫与数据挖掘”,进行关注

回复“书籍”即可获赠Python从入门到进阶共10本电子书

博观而约取,厚积而薄发。

日常工作中,我们或多或少都会接触到 Excel 表格、Word 文档和 PDF 文件。偶尔来个处理文件的任务,几个快捷键操作一下——搞定!但是,偏偏有些烦人的工作,操作繁琐且数据复杂,更要命的是耗时间,吭哧吭哧一下午却难出几个成果。

此时如果我们掌握些 Python 编程的技巧,整理下文件处理的流程通过编码来实现,不仅省时省力省心,还可以精进编码技术。今天我们就通过一个 PDF 处理的实例来演示下 Python 助力办公的过程。

上周朋友提了个 PDF 处理的问题,要求如下:

大致整理下,这问题和把大象装冰箱一样要分三步:

  1. 读取 PDF 中的表格内容

  2. 在表格内容中提取特定数据

  3. 以特定数据对文件重命名

此时面向 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 中表格并重命名相关推荐

  1. 通过Python的pdfplumber库提取pdf中表格数据

    文章目录 前言 一.pdfplumber库是什么? 二.安装pdfplumber库 三.查看pdfplumber库版本 四.提取pdf中表格数据 1.引入库 2.定义pdf文件路径 3.打开pdf文件 ...

  2. 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 ...

  3. python中读取word信息_Python实现批量读取word中表格信息的方法

    本文实例讲述了Python实现批量读取word中表格信息的方法.分享给大家供大家参考.具体如下: 单位收集了很多word格式的调查表,领导需要收集表单里的信息,我就把所有调查表放一个文件里,写了个py ...

  4. python pdf 数据转excel 表格_python实现PDF中表格转化为Excel的方法

    这几天想统计一下<中国人文社会科学期刊 AMI 综合评价报告(2018 年):A 刊评价报告>中的期刊,但是只找到了该报告的PDF版,对于表格的编辑不太方便,于是想到用Python将表格转 ...

  5. python 读取 word 表格_Python实现批量读取word中表格信息的方法

    本文实例讲述了Python实现批量读取word中表格信息的方法.分享给大家供大家参考.具体如下: 单位收集了很多word格式的调查表,领导需要收集表单里的信息,我就把所有调查表放一个文件里,写了个py ...

  6. PDFPlumber使用入门+python实现PDF中表格转化为Excel的方法

    PDFPlumber使用入门:https://blog.csdn.net/weixin_48629601/article/details/107224376 python实现PDF中表格转化为Exce ...

  7. java pdfbox读取pdf中的表格

    java pdfbox读取pdf中的表格 目前遇到了需要解析pdf中表格的需求,遇到无法解析表格中的空格,求助大神帮助!!! <dependency><groupId>org. ...

  8. 通过Python的fitz库提取pdf中的图片

    文章目录 前言 一.fitz库是什么? 二.安装fitz库 三.查看fitz库版本 四.pymupdf库是什么? 五.安装pymupdf库 六.查看pymupdf库版本 七.fitz和pymupdf是 ...

  9. java读取pdf_Java 读取PDF中的文本和图片的方法

    本文将介绍通过Java程序来读取PDF文档中的文本和图片的方法.分别调用方法extractText()和extractImages()来读取. 使用工具:Free Spire.PDF for Java ...

最新文章

  1. 这次性能优化, QPS 翻倍了
  2. 7个实战案例、24个学习视频、12G干货资料...今天带你免费入门Python数据分析!...
  3. linux 编程博客,Linux系统编程博客参考
  4. VTK:图片之ImageAnisotropicDiffusion2D
  5. 玩linux笔记——持续更新
  6. java图像处理,彩色图像转灰度图的几种实现方式
  7. xfce4下面搜狗输入法默认按键设置
  8. 107. 二叉树的层序遍历 II and 102. 二叉树的层序遍历 023(BFS模板题打两道)
  9. centos查询是否有安装软件包
  10. ubuntu+vulkan
  11. SmartSVN for Mac(SVN客户端)
  12. 360浏览器小号多开使用
  13. 目标板(linux)与PC 网卡 直连(TFTP)
  14. linux制作 引导盘,制作Linux引导盘的四种方法
  15. matlab计算轮廓曲率半径,【转】求最小曲率半径matlab源程序
  16. 卐 4-3D图形的数学
  17. 删除word标题前方空格的方法
  18. 用wt文件恢复mongodb
  19. 新乡学院二批计算机类分数线,新乡学院录取分数线2021是多少分(附历年录取分数线)...
  20. akka 与kafka

热门文章

  1. python实现栅格计算器功能
  2. 简述7个流行的强化学习算法及代码实现!
  3. PHP 加密、解密工具Zend Guard和ionCube
  4. 数字图像中手写阿拉伯数字的识别技术概览
  5. 界面控件BCGControlBar for .NET v7.1正式发布——支持VS 2022
  6. 计算机 发声原理,耳机 篇十五:动铁耳机发声原理哦。喜欢记得收藏。
  7. 北大计算机硕士选调有发展吗,985毕业生不愿当公务员?别被忽悠了,看看北大毕业生的去向!...
  8. Seneca:NodeJS 微服务框架入门(一)
  9. 什么是一方库、二方库、三方库
  10. 一种能人类大脑信息解读成声音信息的人工智能