当前位置:首页>python>别再复制粘贴了!用这个Python库,PDF表格秒变Excel

别再复制粘贴了!用这个Python库,PDF表格秒变Excel

  • 2026-09-02 19:42:27
别再复制粘贴了!用这个Python库,PDF表格秒变Excel

最近小编每天用各种 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,没有Java依赖

一句话:它是目前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页的财务报表:

方法
耗时
准确率
手动复制粘贴
2小时+
100%(但累死人)
Adobe Acrobat
30分钟
80%(经常错位)
pdfplumber2分钟95%+

效率提升60倍,而且准确率更高。


七、写在最后

工具的意义,就是让我们从重复劳动中解放出来。
程序员的价值,不在于会多少API,而在于能用技术解决实际问题。

下次再遇到PDF处理的需求,别急着加班,先想想:能不能用代码解决?

代码改变生活,从拒绝复制粘贴开始。


当然啦,小编实测AI安利的 pdfplumber 很好用哦,大家要不要去试试看?

最新文章

随机文章