京公网安备 11010802034615号
经营许可证编号:京B2-20210330
来源:早起Python
作者:陈熹
40个Python办公自动化案例合辑
大家好,我是早起。本文将分享一个常见办公场景下的Python自动化案例,主要将涉及以下两个内容
有一个文件夹 货物清单 中含有多张货物清单的影印版 PDF,分别命名为 文件 (1).pdf 文件 (2).pdf ... 文件 (20).pdf,如下所示:
PDF 是纯图片类型,里面的文字信息无法手动复制,同时本例中所有的图片都向左旋转 90 度,大致如下图所示(马赛克部分为无关内容):
我们需要做的是 「 获取图中红框部分 TRACKING# 以及 REF2 冒号后的字符串,用 & 连接后重命名这个 PDF 文件 」 !
也就是需要根据每个PDF内容来批量重命名一大堆文件,最终效果如下
本需求是一个批处理问题,即需要对诸多文件执行类型的操作,基本思路是先完成对一份文件的处理,然后借助 glob 模块获取指定路径所有符合要求的文件路径,执行批处理框架,固后面的操作先针对 文件 (1).pdf
需求中最大的难题在于,PDF 是图片类型,无法按常规方法提取文件。解决思路是利用光学字符识别(OCR)将图片中的文字识别出,然后进行后续操作,这里就涉及到一些先后顺序:
将图片向右旋转回正位
截取需要识别的部分图片
将截取的图片交给 OCR 获取字符串
为了完成 OCR,需要在电脑上安装三个软件:
Ghostscript 32 位
ImageMagick 32 位
tesseract-OCR 32 位
三个软件的下载安装没有特殊的地方(tesseract 配置稍复杂但网络有上诸多教程,这里不再赘述),读者可自行搜索下载及配置
首先导入需要的模块:
from wand.image import Image
from PIL import Image as PI import pyocr import pyocr.builders import io import glob import re import os import shutil
具体的模块用途可以参考下面具体代码。其中 wand 和 pyocr 由于是非标准库需要自行额外安装。打开命令行输入:
pip install wand
pip install pyocr
作为测试以及方便后面的实际运行,需求中的 货物清单 这一文件夹可以放在桌面上。为了获取其中的内容首先我们要明确桌面的路径。每个人每台电脑的桌面路径都不相同,如果直接复制当前电脑桌面的路径,更换电脑或者其他用户调试就需要额外修改。可通过下面基于 os 模块的代码获取桌面路径:
# 获取桌面路径包装成一个函数 def GetDesktopPath(): return os.path.join(os.path.expanduser("~"), 'Desktop')
path = GetDesktopPath() + r'货物清单' # 获取 货物清单 文件夹路径
获取配置好的 tesseract 便于后面调用:
tool = pyocr.get_available_tools()[0]
以 文件 (1).pdf 为例,通过 wand 模块将 PDF 文件转化为分辨率为 300 的 jpeg 图片形式:
image_pdf = Image(filename=path + r'文件 (1).pdf', resolution=300)
image_jpeg = image_pdf.convert('jpeg')
将图片解析为二进制矩阵:
image_lst = [] for img in image_jpeg.sequence:
img_page = Image(image=img)
image_lst.append(img_page.make_blob('jpeg'))
用 io 模块的 BytesIO 方法读取二进制内容为图片形式:
new_img = PI.open(io.BytesIO(image_lst[0]))
由于图片现在处于左旋 90 度的水平位,将其转为正位可以用 rotate() 方法,注意该方法是逆时针旋转,因此回正位需要逆时针旋转 270 度。完善上面的代码,并为 new_img.show() 预览图片:
new_img = PI.open(io.BytesIO(image_lst[0])).rotate(270)
new_img.show()
弹出图片并恢复到了正位,接下来分别截取需要提取部位字符串的图片了,尽量让图片中只有需要识别的部分,获取识别出来容易简单处理获得需要的内容 截取图片用 image.crop((left, top, right, bottom)) 四个参数需要反复调试才能确定。首先提取 TRACKING# 部位需要的内容,经确定四个参数分别是 350 600 1350 730,尝试截取和预览图片:
### 解析1Z开头码 left = 350
top = 600
right = 1300
bottom = 730
image_obj1 = new_img.crop((left, top, right, bottom))
image_obj1.show()
截取成功后可以交给 OCR 了,代码为 tool.image_to_string()
txt1= tool.image_to_string(image_obj1) print(txt1)
通过正则提取红框内需要的内容:
req = 'TRACKING #: (.*)' txt1_real = ''.join(re.findall(req, txt1)[0].split()) print(txt1_real)
用同样的办法也可以提取另一个红框的文字:
### 解析C开头码 left = 205 top = 1170 right = 2450 bottom = 1200 image_obj2 = new_img.crop((left, top, right, bottom)) txt2 = tool.image_to_string(image_obj2) req = 'C.d+d' txt2_real = re.findall(req, txt2)[0]
最后将两个字符串和 & 拼接为长字符串,然后通过 os.rename() 完成重命名文件的目的:
file_name = txt1_real + '&' + txt2_real
os.rename(path + r'文件 (1).pdf', path + r'{}.pdf'.format(file_name))
至此我们就完成了需求的一大步,接下来只需要借助 glob 模块遍历目标文件夹,对获取的每一个文件执行上面的操作即可,这样就将全部需求完成,所有的PDF均按照指定字段进行重命名
本文的分享就到这里,上面的 Python办公自动化 案例可以扩展到很多使用场景(核心为提取PDF指定内容+批量重命名),大家可以自己找一些文件测试学习,如果对你有所帮助可以给本文来一波三连~
数据分析咨询请扫描二维码
若不方便扫码,搜微信号:CDAshujufenxi
在业务数据可视化中,热力图(Heat Map)是传递“数据密度与分布特征”的核心工具——它通过颜色深浅直观呈现数据值的高低,让“ ...
2025-11-26在企业数字化转型中,业务数据分析师是连接数据与决策的核心纽带。但“数据分析师”并非单一角色,从初级到高级,其职责边界、能 ...
2025-11-26表格结构数据以“行存样本、列储属性”的规范形态,成为CDA数据分析师最核心的工作载体。从零售门店的销售明细表到电商平台的用 ...
2025-11-26在pandas数据处理工作流中,“列标签”(Column Labels)是连接数据与操作的核心桥梁——它不仅是DataFrame数据结构的“索引标识 ...
2025-11-25Anaconda作为数据科学领域的“瑞士军刀”,集成了Python解释器、conda包管理工具及海量科学计算库,是科研人员、开发者的必备工 ...
2025-11-25在CDA(Certified Data Analyst)数据分析师的日常工作中,表格结构数据是最常接触的“数据形态”——从CRM系统导出的用户信息表 ...
2025-11-25在大数据营销从“粗放投放”向“精准运营”转型的过程中,企业常面临“数据维度繁杂,核心影响因素模糊”的困境——动辄上百个用 ...
2025-11-24当流量红利逐渐消退,“精准触达、高效转化、长效留存”成为企业营销的核心命题。大数据技术的突破,让营销从“广撒网”的粗放模 ...
2025-11-24在商业数据分析的全链路中,报告呈现是CDA(Certified Data Analyst)数据分析师传递价值的“最后一公里”,也是最容易被忽视的 ...
2025-11-24在数据可视化实践中,数据系列与数据标签的混淆是导致图表失效的高频问题——将数据标签的样式调整等同于数据系列的维度优化,或 ...
2025-11-21在数据可视化领域,“静态报表无法展现数据的时间变化与维度关联”是长期痛点——当业务人员需要分析“不同年份的区域销售趋势” ...
2025-11-21在企业战略决策的场景中,“PESTEL分析”“波特五力模型”等经典方法常被提及,但很多时候却陷入“定性描述多、数据支撑少”的困 ...
2025-11-21在企业数字化转型过程中,“业务模型”与“数据模型”常被同时提及,却也频繁被混淆——业务团队口中的“用户增长模型”聚焦“如 ...
2025-11-20在游戏行业“高获客成本、低留存率”的痛点下,“提前预测用户流失并精准召回”成为运营核心命题。而用户流失并非突发行为——从 ...
2025-11-20在商业数据分析领域,“懂理论、会工具”只是入门门槛,真正的核心竞争力在于“实践落地能力”——很多分析师能写出规范的SQL、 ...
2025-11-20在数据可视化领域,树状图(Tree Diagram)是呈现层级结构数据的核心工具——无论是电商商品分类、企业组织架构,还是数据挖掘中 ...
2025-11-17核心结论:“分析前一天浏览与第二天下单的概率提升”属于数据挖掘中的关联规则挖掘(含序列模式挖掘) 技术——它聚焦“时间序 ...
2025-11-17在数据驱动成为企业核心竞争力的今天,很多企业陷入“数据多但用不好”的困境:营销部门要做用户转化分析却拿不到精准数据,运营 ...
2025-11-17在使用Excel透视表进行数据汇总分析时,我们常遇到“需通过两个字段相乘得到关键指标”的场景——比如“单价×数量=金额”“销量 ...
2025-11-14在测试环境搭建、数据验证等场景中,经常需要将UAT(用户验收测试)环境的表数据同步到SIT(系统集成测试)环境,且两者表结构完 ...
2025-11-14