收到领导甩过来的100个PDF,你盯着屏幕发愣。手动复制粘贴,眼睛得瞎。一个一个打开另存为,手得废。别急,15行Python代码能搞定。
先装几个库。pdfplumber负责读PDF内容,pandas负责把数据写成表格,os负责遍历文件夹。这三个是标配,缺一不可。
代码长这样:
import os, pdfplumber, pandas as pd data = []
for f in os.listdir('.'):
if not f.endswith('.pdf'): continue
with pdfplumber.open(f) as pdf:
for page in pdf.pages:
table = page.extract_table()
if table: data.extend(table[1:])
df = pd.DataFrame(data, columns=['姓名','金额','日期'])
df.to_excel('结果.xlsx', index=False)
这脚本干了几件事。先扫描当前文件夹所有PDF文件,跳过非PDF格式。然后一页一页翻,遇到表格就抽出来。表头那一行不要,只拿数据行。最后拼成Excel文件。文件名就叫“结果.xlsx”。
你可能会问,PDF格式不一致怎么办。表格位置漂移怎么搞。别担心,pdfplumber比较聪明,能识别页面里最像表格的矩形区域。就算表格在页面角落,它也能定位到。
跑一下脚本,100个PDF处理完大概30秒。出来的Excel直接可以发给领导。同事还在对着屏幕复制粘贴,你已经关电脑下班了。
遇到PDF里全是扫描件咋办。那是图片,上一步的代码读不到文字。这种情况要装pytesseract配合PIL做图片转文字。先提取图片,再识别文字,最后用正则表达式抓数据。代码会多几行,但核心思路不变。
分享一个坑。有些PDF表面看着是表格,实际是文本框拼出来的假表格。这时候extract_table()返回空值。可以试试page.extract_text()拿所有文字,自己用split分割。别一棵树上吊死。
另一个坑是中文编码。生成Excel前加一行df.to_excel('结果.xlsx', encoding='utf-8-sig')。不然打开表格看到一堆乱码,领导会以为你瞎糊弄。
代码写完记得测试。先拿一个PDF试试水,能跑通再批量处理。别上来就怼100个,万一卡住哭都来不及。遇到报错看提示,多半是表格结构不一致。手动检查一下异常文件,写几个if条件分流处理就行。
这脚本能帮你省下三四个小时。拿去用的时候把文件名、列名换成你自己的。要是觉得15行都嫌多,还能精简到10行。留点余地给以后扩展就行。
夜雨聆风