来源:早起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指定内容+批量重命名),大家可以自己找一些文件测试学习,如果对你有所帮助可以给本文来一波三连~
数据分析咨询请扫描二维码
CDA数据分析师在中国航信高科技产业园进行了面向测试度量的数据分析培训课程,培训人数近2 ...
2024-05-01CDA数据分析师走进深圳迈瑞生物医疗电子股份有限公司,在迈瑞总部展开了为期两天的培训,本次课程参训人员线上及线下近百人, ...
2024-05-01CDA数据分析师在合肥市对合肥阳光新能源科技有限公司开展了为期8天的企业内训。 合肥阳光新能源科技 ...
2024-05-01CDA数据分析师走进海尔大学,进行了《数据治理与数据中台建设的道与术》专题培训,培训现场爆满,近百人参加了此次培训。 ...
2024-05-01在中国银行苏州分行培训中心开始数据分析师培训,此次培训课程共10天内容,包括Excel、MySQL、概率论与数理统计、SPSS等内容, ...
2024-05-01从实际的业务需求出发,结合行业的典型应用特点,围绕实际的商业问题,探讨数据挖掘、机器学习模型在金融领域的应用,包括获客、信用评分、细分画像、交叉销售、反欺诈、违规识别、时序预测、运筹优化、流程挖掘九个方面,形成 ...
2024-05-01本次培训课程为线上+线下的模式,由于学员编程能力不一、部分学员没有编程基础,故提供统计学、python基 ...
2024-05-01华夏银行信用卡中心-机器学习培训 1、课程亮点 取材于业界一流企业和顶级咨询公司的行业实践;已经被证明是人人 ...
2024-05-01主 题:数据中台建设及数据分析应用主题分享 1. 数据中台市场洞察 2. 主流数据中台产品比较 3. 某企业数据中 ...
2024-05-01围绕“数据驱动”战略,全力打造我行 300 人数字化人才梯队,着力培养数字化管理人才、大数据专业团队 ...
2024-05-01在当今数据驱动的商业环境中,数据分析成为了企业决策的重要依据。通过对大量数据的收集、处理和分析,企业能够更好地理解市场 ...
2024-04-29在人工智能(AI)的世界里,提示词(Prompt)是一种强大的工具,它能够引导AI按照用户的需求产生特定的输出。本文将深入探讨AI ...
2024-04-29CDA立足未来职场,拓展前沿视野——对外经贸大学保险学院举办“三全育人大讲堂”分享行业最新动态。 ...
2024-04-294月2日,CDA数据分析师创始发起人兼协会理事长赵坚毅博士受邀在浙江万里学院举办了一场以“数字化能力在职场中的作用” ...
2024-04-29随机森林(Random Forests)现在机器学习中比较火的一个算法,是一种基于Bagging的集成学习方法,能够很好地处理分类和回归的问 ...
2022-12-23方差分析是数据分析中常用的一种统计分析方法,接下来让我们简单了解一下方差分析的基本思想和原理吧。 方差分析(Analysis ...
2022-12-23来源:关于数据分析与可视化 关于streamlit-aggrid 数据排序 表格样式的调整 数据 ...
2022-08-03作者:麦叔 定义 「把上面晦涩的概念汇成一句话就是:」 ❝ 回调函数就是一个被作为参 ...
2022-08-03现今,高学历人群日益增多,物以稀为贵的高学历光环淡去。无论本科生还是研究生,甚至博士生,求职竞争力都大不如前,就业压力越来越大。
2022-06-01某家企业10个人面试,有9个本科生……如何脱颖而出,除得体的举止和良好的沟通力外,证书成重要筹码,这也是很多人考证的关键所在。
2022-04-14深圳SEO优化公司南澳建站公司西安网站定制价格德阳SEO按天收费重庆建站推荐茂名建设网站多少钱张家口关键词按天计费多少钱丽江SEO按天计费公司中卫外贸网站设计聊城网站seo优化哪家好铁岭关键词按天计费公司景德镇英文网站建设哪家好辽源网站优化哪家好鹤壁建设网站唐山百度标王公司平顶山关键词按天计费推荐汉中网站优化按天计费公司海南seo网站优化张家界外贸网站制作推荐同乐如何制作网站哪家好北京建站推荐黔西南网站优化按天计费价格垦利网站制作伊春外贸网站设计大浪关键词按天收费推荐江门百度标王吴忠网站优化排名哪家好九江设计公司网站多少钱吉林SEO按天收费公司郑州如何制作网站哪家好焦作关键词排名多少钱歼20紧急升空逼退外机英媒称团队夜以继日筹划王妃复出草木蔓发 春山在望成都发生巨响 当地回应60岁老人炒菠菜未焯水致肾病恶化男子涉嫌走私被判11年却一天牢没坐劳斯莱斯右转逼停直行车网传落水者说“没让你救”系谣言广东通报13岁男孩性侵女童不予立案贵州小伙回应在美国卖三蹦子火了淀粉肠小王子日销售额涨超10倍有个姐真把千机伞做出来了近3万元金手镯仅含足金十克呼北高速交通事故已致14人死亡杨洋拄拐现身医院国产伟哥去年销售近13亿男子给前妻转账 现任妻子起诉要回新基金只募集到26元还是员工自购男孩疑遭霸凌 家长讨说法被踢出群充个话费竟沦为间接洗钱工具新的一天从800个哈欠开始单亲妈妈陷入热恋 14岁儿子报警#春分立蛋大挑战#中国投资客涌入日本东京买房两大学生合买彩票中奖一人不认账新加坡主帅:唯一目标击败中国队月嫂回应掌掴婴儿是在赶虫子19岁小伙救下5人后溺亡 多方发声清明节放假3天调休1天张家界的山上“长”满了韩国人?开封王婆为何火了主播靠辱骂母亲走红被批捕封号代拍被何赛飞拿着魔杖追着打阿根廷将发行1万与2万面值的纸币库克现身上海为江西彩礼“减负”的“试婚人”因自嘲式简历走红的教授更新简介殡仪馆花卉高于市场价3倍还重复用网友称在豆瓣酱里吃出老鼠头315晚会后胖东来又人满为患了网友建议重庆地铁不准乘客携带菜筐特朗普谈“凯特王妃P图照”罗斯否认插足凯特王妃婚姻青海通报栏杆断裂小学生跌落住进ICU恒大被罚41.75亿到底怎么缴湖南一县政协主席疑涉刑案被控制茶百道就改标签日期致歉王树国3次鞠躬告别西交大师生张立群任西安交通大学校长杨倩无缘巴黎奥运