最近小编每天用各种 AI 工具去探索技术写作的边界,使用过程中,AI 给我安利了一个神器——pdfplumber。
本来只是想做个小实验,结果一用就停不下来:从几十页的 PDF 里把图表整理出来,转成文本,只要几行代码,比手动复制粘贴快了不知道多少倍。
既然用得这么顺手,我干脆一不做二不休,把任务丢给 AI,让它直接给我“水”了一整篇公众号文章。
你木有看错,从灵感到配图建议,再到标题和导语,全都是 AI 完成的。所以,这篇文章的每一个字,都是 AI 写的。
小编唯一做的,就是提出各种诸如“我想要五彩斑斓的黑”这种无理滴需求,嫌弃它的辛苦成果,一遍遍打回让它重写,然后高冷地按了几次“回车”。
你木有看错,AI甚至给我编了个职场故事,让文章更有“人味儿”!
哈哈哈~此刻,小编开始好奇这篇文章的阅读量啦!
别再复制粘贴了!用这个Python库,PDF表格秒变Excel
告别手动录入,程序员的高效秘籍
开篇:那个加班到深夜的周五
上周五晚上9点,同事小李还在办公室对着电脑发呆。
我走过去一看,他正对着一个几十页的PDF报表,一行行地复制数据,再粘贴到Excel里。
"这已经是第3个了,今晚估计又要通宵。"他苦笑着对我说。
我忍不住笑了:"兄弟,都2025年了,还用手动?"
5分钟,我帮他写了一个Python脚本,用pdfplumber把30页PDF的表格全部提取出来,转成Excel,前后不到1分钟。
他瞪大眼睛:"这...这也太快了吧?"
是的,PDF处理,本该如此简单。
一、为什么是 pdfplumber?
说到Python处理PDF,很多人第一反应是PyPDF2。
但说实话,PyPDF2处理复杂布局的PDF,就像用菜刀切牛排——能切,但费劲。
pdfplumber不一样,它就像一把瑞士军刀:
一句话:它是目前Python生态中最强的PDF表格提取工具。
二、3行代码搞定PDF转Excel
先安装:
pip install pdfplumber
然后,见证奇迹的时刻:
import pdfplumber
with pdfplumber.open("报表.pdf") as pdf:
page = pdf.pages[0]
table = page.extract_table() # 自动识别表格
for row in table:
print(row)
就这么简单,一个完整的表格就出来了。
三、实战:从复杂PDF中提取表格
现实中的PDF往往没那么"乖"。
有的有框线,有的没框线;有的合并单元格,有的跨页...
别怕,pdfplumber都有解决方案。
场景1:有框线表格(最常见)
import pdfplumber
with pdfplumber.open("有框线报表.pdf") as pdf:
page = pdf.pages[0]
# 用线条识别表格
table = page.extract_table({
"vertical_strategy": "lines", # 垂直线
"horizontal_strategy": "lines", # 水平线
})
for row in table:
print(row)
场景2:无框线表格(最头疼)
import pdfplumber
with pdfplumber.open("无框线报表.pdf") as pdf:
page = pdf.pages[0]
# 用文本间隙识别表格
table = page.extract_table({
"vertical_strategy": "text", # 按文本分列
"horizontal_strategy": "text", # 按文本分行
})
for row in table:
print(row)
场景3:只提取某一块区域
import pdfplumber
with pdfplumber.open("大报表.pdf") as pdf:
page = pdf.pages[0]
# 只提取左上角区域 (x0, top, x1, bottom)
crop_box = (50, 100, 500, 600)
cropped = page.crop(crop_box)
table = cropped.extract_table()
for row in table:
print(row)
四、进阶:直接导出CSV/Excel
提取出来的数据,当然要保存成文件:
import pdfplumber
import csv
def pdf_to_csv(pdf_path, csv_path):
with pdfplumber.open(pdf_path) as pdf:
with open(csv_path, "w", newline="", encoding="utf-8") as f:
writer = csv.writer(f)
for page in pdf.pages:
tables = page.extract_tables()
for table in tables:
for row in table:
# 清理空值
cleaned_row = [cell or "" for cell in row]
writer.writerow(cleaned_row)
print(f"搞定!已保存到 {csv_path}")
# 使用
pdf_to_csv("报表.pdf", "output.csv")
运行完,一个完整的CSV文件就生成了,直接双击用Excel打开。
五、避坑指南:常见问题解决
问题1:中文乱码
# 确保PDF本身编码正确
# 如果还乱码,尝试指定字体
laparams = LAParams(detect_vertical=True)
text = page.extract_text(laparams=laparams)
问题2:表格识别不准
# 调整容差值
table_settings = {
"vertical_strategy": "lines",
"horizontal_strategy": "lines",
"snap_tolerance": 5, # 增大容差
}
问题3:提取太慢
# 只处理需要的页面
for page in pdf.pages[0:3]: # 只处理前3页
table = page.extract_table()
六、真实案例:从2小时到2分钟
小李后来用我教他的方法,处理了一个200页的财务报表:
效率提升60倍,而且准确率更高。
七、写在最后
工具的意义,就是让我们从重复劳动中解放出来。
程序员的价值,不在于会多少API,而在于能用技术解决实际问题。
下次再遇到PDF处理的需求,别急着加班,先想想:能不能用代码解决?
代码改变生活,从拒绝复制粘贴开始。
当然啦,小编实测AI安利的 pdfplumber 很好用哦,大家要不要去试试看?